Rev 1 | 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;
}