Robot porusza się dowolnie wewnątrz obszaru na planszy testowej ograniczonego czarną linią. Nie może poza niego wyjechać! Gdy najedzie na czarną linię, powinien zawrócić. Niekoniecznie o 180 stopni. Np. Angle is 120 + random(120) zunifikuje Angle z liczbą z przedziału od 120 do 240. Można jej użyć jako kąt obrotu robota.
Rozwiązanie
:- consult('plnxt.pl'). start :- nxt_open, nxt_light_LED(activate), trigger_create(_,check_color,odwroc), nxt_go(300). check_color :- nxt_light(Value, force), Value < 55, write(Value). odwroc :- nxt_rotate(320, 120 + random(120), force), start. :- start.
Robot przemieszcza się po pomieszczeniu i zmienia kierunek poruszania się, gdy przed sobą napotka przeszkodę.
:- consult('plnxt.pl'). start :- nxt_open, trigger_create(_,check_distance,odwroc), nxt_go(300). check_distance :- nxt_ultrasonic(Distance,force), Distance < 5. odwroc :- nxt_rotate(320, 120 + random(120), force), start. :- start.
:- consult('sciezka_do_plnxt.pl'). start :- nxt_open, trigger_create(_,check_distance,[nxt_stop,nxt_close]), nxt_go(300). check_distance :- nxt_ultrasonic(Distance,force), Distance < 15.
SWIPL wyświetla komunikat, że nie może odnaleźć predykatu nxt_close, nie wiemy dlaczego tak się dzieje, ponieważ samo wywołanie tego predykatu działa poprawnie