Subversion Repositories svnkaklik

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 1

/roboti/callis/sumo_kaklik2.nqc
0,0 → 1,161
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(20);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
Off(MLEFT);
Off(MRIGHT);
 
Wait(20); // pockej na ustaleni narazniku
 
// rozjed tasky
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika() // nahodne otaceni
{
while(true) Zatoc();
}
 
void GoBlue() // pojezd ve smeru modreho senzoru
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed() // pojezd ve smeru cerveneho senzoru
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat() // obrat o 180 stupnu
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(125); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc() // nahodne zatoceni, nebo popojeti
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
PlaySound(SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(10); // popojed kus
Off(MLEFT);
Off(MRIGHT);
Obrat();
GoBlue();
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
stop cervena;
GoRed();
start cervena;
start blue_bumper;
start stochastika;
}
}
}