-
Notifications
You must be signed in to change notification settings - Fork 2
Paranoiaque
- Lorsque le robot détecte un objet, il avance. S’il ne détecte aucun objet, il tourne à gauche.
- Lorsque capteur central du robot détecte un objet, le robot avance. Lorsque c’est le capteur droit (mais pas le capteur central) qui détecte un objet, le robot tourne à droite. Lorsque c’est le capteur gauche (mais pas le capteur central) qui détecte un objet, le robot tourne à gauche.
- Tâche similaire à Paranoïaque, mais cette fois changer à chaque seconde la direction dans laquelle le robot tourne. Indice : Utilisez des états pour retenir la direction actuelle et un minuteur pour changer d’état.
Exercice 1
Lorsque le capteur avant détecte un objet, il avancera. En revanche lorsque ce dernier ne capte rien, il tourne à gauche.
Exercice 2
Lorsque le capteur avant détecte un objet, le Thymio avance, lorsque c'est le capteur gauche, il tourne à gauche et pour le capteur de droite, il tourne à droite. Trois actions, trois lignes.
Exercice 3
Les deux premières lignes sont à peu près similaires à l'exercice 1. La ligne deux ajoute néanmoins un état allumé lorsque le Thymio ne détecte rien et lance un timer de 1sec. Lorsque ce timer est écoulé, Thymio effectue la troisième ligne d'événement, où il va tourner cette fois-ci à droite et enclenché un timer de 1sec encore une fois. Il passe également son état à éteint. Lorsque le timer s'éteint alors que l'état est éteint. Thymio effectue alors la dernière ligne d’événement, qui lui fait tourner à gauche et enclenche un timer de 1sec tout en allumant l'état. En conclusion, si Thymio ne détecte pas d'objet devant lui, il tourner 1sec à gauche puis 1sec à droite en boucle.
Exercice 1
# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)
onevent prox
when prox.horizontal[2] >= 2000 do
motor.left.target = 200
motor.right.target = 200
emit pair_run 0
end
when prox.horizontal[2] <= 1000 do
motor.left.target = -200
motor.right.target = 200
emit pair_run 1
end
Exercice 2
# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)
onevent prox
when prox.horizontal[2] >= 2000 do
motor.left.target = 200
motor.right.target = 200
emit pair_run 0
end
when prox.horizontal[0] >= 2000 do
motor.left.target = -200
motor.right.target = 200
emit pair_run 1
end
when prox.horizontal[4] >= 2000 do
motor.left.target = 200
motor.right.target = 400
emit pair_run 2
end
Exercice 3
# variables for state
var state[4] = [0,0,0,0]
var new_state[4] = [0,0,0,0]
# stop timer 0
timer.period[0] = 0
# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)
# subroutine to display the current state
sub display_state
call leds.circle(0,state[1]*32,0,state[3]*32,0,state[2]*32,0,state[0]*32)
onevent prox
when prox.horizontal[2] >= 2000 do
motor.left.target = 200
motor.right.target = 200
emit pair_run 0
end
when prox.horizontal[2] <= 1000 do
new_state[0] = 1
motor.left.target = -200
motor.right.target = 200
timer.period[0] = 1000
emit pair_run 1
end
call math.copy(state, new_state)
callsub display_state
onevent timer0
timer.period[0] = 0
if state[0] == 1 then
new_state[0] = 0
motor.left.target = 200
motor.right.target = -200
timer.period[0] = 1000
emit pair_run 2
end
if state[0] == 0 then
new_state[0] = 1
motor.left.target = -200
motor.right.target = 200
timer.period[0] = 1000
emit pair_run 3
end
call math.copy(state, new_state)
callsub display_state