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