Nahodny pohyb.nxc

From RoboWiki
Jump to: navigation, search

Krúžok Robotiky

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


 }
 }