Subversion Repositories svnkaklik

Rev

Go to most recent revision | Blame | Last modification | View Log | Download

#define THRESHOLD  44
#define POJEZD     OUT_B
#define VYHAZ      OUT_C

task main()
{
  PlaySound (SOUND_DOUBLE_BEEP);
  Wait(500); // 5s podle pravidel
  SetSensor(SENSOR_1,SENSOR_LIGHT);   // senzor na caru modry
  SetSensor(SENSOR_2,SENSOR_LIGHT);   // senzor na caru cerveny
  SetSensor(SENSOR_3, SENSOR_TOUCH);  // poloha vyhazovadla
  SetSensorMode (SENSOR_3, SENSOR_MODE_PULSE); // koncak bude pocitat pulzy
  while (true)
  {
   // kazdych 10s dojed k care a zpet do vyckavaci pozice
   PlaySound (SOUND_CLICK);
   start k_care;
   Wait(1000); // 10s
   stop k_care;
   stop radar;
   stop cara;
  }
}

// udrazeni soupere, pokud drcnul do radaru nebo nas natlacil na caru
task utok()
{
  stop radar;
  stop cara;
  PlaySound (SOUND_FAST_UP);

  SetPower (POJEZD+VYHAZ,OUT_FULL);        // plnou parou vpred
  OnFwd(POJEZD);
  OnRev(VYHAZ);
  ClearSensor (SENSOR_3);
// tlac, dokud se radar 2x neotoci nebo je jeste videt cara
  while ( (2 > SENSOR_3) || (SENSOR_2 > THRESHOLD) );
  Off(VYHAZ);
  Off(POJEZD);
  
  start k_care;          // po odrazeni soupere se vrat do vyckavaci pozice
  stop utok;
}

task k_care()  // najed do vyckavaci pozice
{
  SetPower (POJEZD,OUT_FULL);
  OnRev (POJEZD);                  // dojezd k care
  while (SENSOR_2 < THRESHOLD);
  OnFwd (POJEZD);
  SetPower (POJEZD,OUT_FULL);
  OnFor (POJEZD, 30);              // popojed kus od cary

  PlaySound (SOUND_DOUBLE_BEEP);
  start radar;
  start cara;
  start cara2;
  stop k_care;
}

task cara() // hlidani natlaceni na caru
{
  while (SENSOR_2 < THRESHOLD); // utoc, kdyz nas neco dotlaci k care
  start utok;
}

task radar()   // hlidani najeti do prostoru vyhazovace
{
  OnFwd(VYHAZ);                    // roztoceni radaru
  SetPower (VYHAZ,OUT_FULL);
  OnFor(VYHAZ,50);
  SetPower (VYHAZ,OUT_LOW);        // snizeni vykonu po roztoceni
  while (true)
  {
    ClearSensor (SENSOR_3);
    OnFwd(VYHAZ);                  // stouchni do radaru na 400ms
    Wait(40);
    Float(VYHAZ);                  // volnobeh
    ClearTimer (0);
    while (0 == SENSOR_3) // testuje se, zda se do 700ms radar otoci
    {
      if (Timer (0) > 7) start utok; // utoc, pokud je zablokovan radar
    }
  }
}

task cara2()    // hlidani cary ze strany "radaru"
{
   while (SENSOR_1 > THRESHOLD);    // cekej na caru
   stop radar;     // vsechno zastav
   stop cara;
   stop k_care;
   stop utok;
   Off(POJEZD);
   Off(VYHAZ);
   start k_care;   // snaz se dojet k care na druhe strane
   stop cara2;
}