Bez większych problemów sparowaliśmy robota z komputerem. Dla sprawdzenia poprawności połączenia sprawdziliśmy działanie robota kilkoma prostymi poleceniami
Zdecydowaliśmy się zaimplementować program „Więzień” ponieważ wydawał się w miarę prosty i od razu wiedzieliśmy jakiego algorytmu użyć. Robot był już zbudowany, jedyną naszą modyfikacją było lepsze zamocowanie czujnika, aby był skierowany prostopadle do ziemi.
Nasz robot na planszy testowej:
Na początku musieliśmy określić zakresy odczytów czujnika dla koloru białego, czarnego i czerwonego. Po kilku próbach zdecydowaliśmy się na:
Po wyliczeniu tych progów zaczęliśmy pisać program, co poszło dosyć sprawnie. Jedynym problemem okazało się zabijanie wątków. Gdy ich nie zabijaliśmy to nie było sposobu aby zatrzymać robota - natworzyło się bardzo dużo wątków które działały w tle.
start :- trigger_create(Trigger1,check_color,[nxt_stop,skret]), trigger_create(Trigger2,check_color2,[nxt_stop,uciekaj]), nxt_go(200). check_color :- nxt_light(Light2,force), Light2 < 45. check_color2 :- nxt_light(Light,force), Light > 60, Light < 67. skret :- trigger_killall, nxt_go_cm(-100,5), nxt_rotate(100,150), start. uciekaj :- nxt_play_tone(500,2000), nxt_go_cm(300,70), nxt_play_tone(500,2000), trigger_killall.
Program działał całkiem nieźle, czasami tylko wychodził poza planszę, ale było to spowodowane bardziej niedokładnością czujnika niż wadą algorytmu.
Czasami po błędnym programie xpce zawieszało się. Nie mieliśmy sposobu na obejście tego problemu - od nowa parowaliśmy urządzenia i zwykle robot zaczynał znowu z nami współpracować, ale nie było to regułą.