En gros, un while…do teste la valeur d'une variable. (sorte de verrou pour arrêter les moteurs durant la programmation)
Et un timer devait changer régulièrement la valeur d'une autre variable incluse dans le code du while afin d'obtenir un comportement différent.
Même si c'est un code bizarre à priori (sorti du contexte), le plus curieux, c'est que ça ne marche pas!
Le while qui s'exécute cycliquement n'est jamais interrompu par le code du timer et le compteur (de test) n'est pas incrémenté.
Si la variable testée est initialisée à 0, le code de la boucle while n'est pas exécuté du tout et alors le timer fonctionne bien (la variable compteur est incrémentée).
Même si ce code de test mélange les notions de boucle d'attente active basique et événement, je ne vois pas pouquoi ça ne marche pas. Une explication pourrait être utile à bien des utilisateurs.
- juste faire zigzager Thymio sur place
var dozigzag = 1
var zigzag_a_gauche = 1
var vitesse = 10 # cm/sec
var zigzag_duree = 500 # milliseconds
var compteurdecoups = 0 # surveiller le timer..
timer.period [0] = zigzag_duree # milliseconds
while dozigzag == 1 do
if zigzag_a_gauche == 1 then
motor.left.target = -vitesse
motor.right.target = vitesse
else
motor.left.target = vitesse
motor.right.target = -vitesse
end
end
- if dozigzag == 0 then
motor.left.target = 0
motor.right.target = 0
- end
onevent timer0
zigzag_a_gauche = (zigzag_a_gauche +1)%2
compteurdecoups = compteurdecoups +1