7. Subroutines (procedury)


Jeśli kilka razy ten sam kod pojawia się w różnych częściach naszego programu, dobrze jest wykorzystać subroutines (sub). Skraca to kod całego programu i poprawia jego czytelność. Subroutines definiuje się przed task main, a w programie wywołuje pisząc jego nazwę.

W poniższym przykładzie zdefiniowano sub turn_around( ), w tasku main zostaje ona wywołana trzy razy.


Program z poprzedniej lekcji (Ultrasonic Sensor) można zapisać wykorzystując subroutines. Procedury prawo i lewo - to obroty. Są one wywoływane w zależności od tego z której strony robota jest większa odległość od przeszkody. Odległość mierzy procedura mierz. 

#define obrot 600
 int l, p;                   //na zmienne l i p przesyłane są odległości od przeszkód

sub prawo()
{  OnFwd(OUT_A,100);
   OnRev(OUT_B,100);   Wait(obrot);
   OnFwd(OUT_AB,100);
   }
   
sub lewo()
{   OnFwd(OUT_B,100);
    OnRev(OUT_A,100);   Wait(obrot);
    OnFwd(OUT_AB,100);
    }

sub mierz()
{
    RotateMotor(OUT_C,75,-90);
    Wait(800);
    l= SensorUS(IN_4);
    RotateMotor(OUT_C,75,180);
    Wait(800);
    p= SensorUS(IN_4);
    RotateMotor(OUT_C,75,-90);
    if (l>p)  lewo();
    else prawo();
}

task main()
{
     l=0;
     p=0;
  SetSensorUltrasonic(IN_4);
  OnFwd(OUT_AB,100);
   while (true)
   {

       if  (SensorUS(IN_4) <50)
     {
      Off(OUT_AB);
      mierz();
     }
   }
}

Zadanie

1. Do robota Explorer podłączony jest również sensor dotyku. Uzupełnij program tak, żeby po dotknięciu przeszkody (niskich przeszkód sensor "nie widzi") robot troszkę cofną się, zmierzył odległość do przeszkód z prawej i lewej strony i pojechał w kierunku, gdzie przeszkoda znajduje się dalej.




Brak komentarzy:

Prześlij komentarz