====== Poruszanie się wzdłuż linii ======
Poniżej znajdują się algorytm sterowania wykorzystujący **sensor natężenia światła**.
===== Algorytm 1 =====
Aby sprawdzić działanie algorytmu należy przygotować makietę z narysowaną czarną linią (najlepiej na białym tle). W algorytmie założono, że robot znajduje się na czarnej linii w chwili startu. Zadaniem robota jest poruszanie się wzdłuż linii.
==== Zapis słowny ====
- jedź do przodu jeżeli widzisz czarną linię, inaczej idź do pkt (2)
- obracaj się w prawo o N0 póki obrót < 450. Jeżeli linia czarna idź do (1). Jeżeli obrót > 450 idź do (3).
- obróć się w lewo o 450. Obracaj się o -N0 w lewo póki obrót > -450. Jeżeli linia czarna idź do (1). Jeżeli obrót < -450 to STOP
==== Zapis regułowy ====
Poniżej został zastosowany zupełny zapis reguł. W zapisie w Prologu zapis ten ulegnie zmianie.
Rule: 1
if light_value == 'black'
then go = 1 and trun_mem = 0
Rule: 2
if light_value != 'black' and turn_mem in [0,45)
then turn = 1 and turn_mem += turn
Rule: 3
if light_value != 'black' and turn_mem in (-45,0)
then turn = 1 and turn_mem += turn
Rule: 4
if light_value != 'black' and turn_mem >= 45
then turn = -turn_mem and turn_mem = -1
Rule: 5
if light_value != 'black' and turn_mem not in (-45,0) and not in [0,90)
then STOP
==== Implementacja w Prologu ====
start :-
nxt_light_sensor(Port,Value),
Value = RGB_black,
assert(turn_mem(0)),
nxt_go(1).
start :-
turn_mem(Value),
Value >= 0,
Value < 45,
nxt_turn(Speed,1)
retractall(turn_mem(_)),
increment(Value,X),
assert(turn_mem(X)).
start :-
turn_mem(Value),
Value >= 45,
nxt_turn(Speed,-Value),
retractall(turn_mem(_)),
assert(turn_mem(-1)).
start :-
turn_mem(Value),
Value < 0,
Value > -45,
nxt_turn(Speed,-1),
retractall(turn_mem(_)),
decrement(Value,X),
assert(turn_mem(X)).
start :-
nxt_go(0).
==== XTT ====
{{:pl:miw:miw08_mindstormsdesign:alg5.png|XTT}}
{{:pl:miw:miw08_mindstormsdesign:alg6.png|XTT2}}
UWAGI!!! FIXME
* Problem z wpisaniem wartości z ujemną wartością