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); } } }