Nahodny pohyb.nxc
From RoboWiki
/* nahodny_pohyb.nxc
Robot ma dva senzory: ultrazvukovy vpredu, na porte 2 a dotykovy vzadu, na porte 1.
Vykonava funkciu: nahodne sa pohybuje a ak sa priblizi k stene
zpredu a spusti sa ultrazvukovy senzor tak cuvne a otoci sa
ak pride k prekazke zo zadu a spusti sa dotikovy senzor robot pojde do predu 0.8 sekundy
a potom sa otoci a cely ciklus sa opakuje odznovu a ktomu bude blikat diodka v
porte B 0.5 sekundy
Autor: Matej Kurilla
*/
int zakruta= 500;
int silnejsi= 50;
int slabsi= 20;
int cas;
int motory;
int vypnutie;
int cassvetielka;
task ultrazvuk()
{
int vzdialenost= 30; //cm
SetSensorLowspeed(IN_2);
while (true) //nekonečná sľučka
{
if (SensorUS(IN_2)<vzdialenost) //podmienka, či je vzdialenosť menšia ako 30 cm
{
OnRev(OUT_AC,50); //dozadu
Wait(800); //čakaj 0.8 sekundy
OnFwd(OUT_C,50); //dopredu motor C
Wait(1300); //čakaj 1,3 sekundy
}
}
}
task senzor()
{
SetSensorTouch(IN_1); //dotykový sanzor
while (true) //nekonečná sľučka
{
if (SENSOR_1 == 1) //podmienka či sa senzor spustil
{
OnFwd(OUT_AC,50); //dopredu
Wait(800); //čakaj0,8 sekundy
OnRev(OUT_C,50); //dozadu motor C
Wait(2000); //čakaj 2 sekundy
}
}
}
task blikanie()
{
while(1)
{
cassvetielka=500;
OnFwd(OUT_B,50); //zapni diodku
Wait(cassvetielka); //čakaj 0,5 sekundy
Float(OUT_B); //vypni diodku
Wait(cassvetielka); //čakaj 0,5 sekundy
}
}
task main()
{
start senzor;
start blikanie;
start ultrazvuk;
while(1)
{
Off(OUT_AC);
cas=random(3000)+500;
motory=random(6);
if ((motory%2)==0)
{
OnFwd(OUT_AC,silnejsi); //dopredu
Wait(cas);
}
if((motory%3)==0)
{
OnRev(OUT_AC,silnejsi); //cúvanie
Wait(1000);
}
if((motory%4)==0)
{
OnFwd(OUT_C,silnejsi); //otáčanie do prava
OnFwd(OUT_A, slabsi);
Wait(zakruta);
}
if((motory%5)==0)
{
OnFwd(OUT_A,silnejsi); //otáčanie do ľava
OnFwd(OUT_C, slabsi);
Wait(zakruta);
}
if((motory%6)==0)
{
Off(OUT_AC); //vypnutie motorov
Wait(cas);
}
}
}