# Variables var motor # Valeur de base pour la puissance des moteurs var motor_change # valeur du changement lors d'une approche ou d'un virage var state # 0 = off (Le Thymio est en arrêt), 1 = on (Le Thymio est en marche) var diff # La difference entre les 2 grands capteurs au sol var dir # La direction finale: 1 = droite, -1 = gauche # Initialisation motor = 0 # La puissance des moteur est nulle motor_change = (motor * 25)/100 state = 0 # Le thymio est en arrêt dir = 0 # le thymio ne va dans aucune direction timer.period[0] = 20 # Période pendant laquelle il y a le calcul de la direction a prendre call leds.circle(0,0,0,0,0,0,0,0) # Aucune led n'est allumée call leds.buttons(0,0,0,0) # Aucune leds des boutons n'est activé # Désigner les leds en cercle pour indiquer la puissance du moteur sub set_circle_leds if motor/100==0 then call leds.circle(0,0,0,0,0,0,0,0) end # Si aucune led n'est allumée alors la vitesse des moteurs est nulle if motor/100==1 then call leds.circle(32,0,0,0,0,0,0,0) end # Si la led frontal est allumée alors la vitesse des moteurs divisé par 100 vaut 1, soit motor = 100 if motor/100==2 then call leds.circle(32,32,0,0,0,0,0,0) end # Si les led frontale et 2eme à droitesont allumées alors la vitesse des moteurs divisé par 100 vaut 2, soit motor = 200 if motor/100==3 then call leds.circle(32,32,32,0,0,0,0,0) end # Si la led frontale,les 2eme et 3eme à droite sont allumées alors la vitesse des moteurs divisé par 100 vaut 3, soit motor = 300 if motor/100==4 then call leds.circle(32,32,32,32,0,0,0,0) end # Si la led frontal, les 2eme, 3eme et 4eme à droite sont allumées alors la vitesse des moteurs divisé par 100 vaut 4 soit motor = 400 if motor/100==5 then call leds.circle(32,32,32,32,32,0,0,0) end # Si la led frontal, les 2eme, 3eme,4eme et 5eme sont allumées alors la vitesse des moteurs divisé par 100 vaut 5, soit motor = 500 # boutons évenements gauche et droit # Augmente ou diminue la puissance du moteur entre 0 et 500 onevent button.left if button.left == 0 then # Si on appuie sur le bouton gauche, on soustrait 100 à la puissance du moteur motor = motor - 100 if motor < 0 then motor = 0 end # Si la puissance est négative alors elle vaut 0 motor_change = (motor * 25)/100 callsub set_circle_leds # Faire appel à la désignation des leds en cercle pour la puissance end onevent button.right if button.right == 0 then # Si on appuie sur le bouton droit, on ajoute 100 à la puissance du moteur motor = motor + 100 if motor > 500 then motor = 500 end # Si la puissance est supèrieure a 500 alors elle vaut 500 motor_change = (motor * 25)/100 callsub set_circle_leds # Faire appel à la désignation des leds en cercle pour la puissance end # lorsque le bouton central est relaché onevent button.center if button.center == 0 then # Si on appuie sur le bouton au centre if state == 0 then # Si le thymio est en arrêt (off) , state prend 1 (on) et le thymio avance state = 1 motor.left.target = motor motor.right.target = motor else # Sinon si state vaut 1 ;le thymio est en marche (on); alors les moteurs s'arretent state = 0 motor.left.target = 0 motor.right.target = 0 end motor_change = (motor * 25)/100 # Calcul de la valeur de la puissance du moteur callsub set_circle_leds # Faire appel à la désignation des leds en cercle pour la puissance end # L'évenenement time apparait onevent timer0 diff = prox.ground.delta[0] - prox.ground.delta[1] # calcul de la difference entre les valeurs des capteurs au sol if abs diff >= 100 then # Si la valeur absolue de la difference est plus élevée que 150 # Calcule de la direction selon le signe de la différence if diff > 0 then # Si la différence est négative, le thymio tourne à droite dir = 1 call leds.top(0, 32, 0) # le thymio s'éclaire vert else # Sinon, le thymio tourne à gauche dir = -1 call leds.top(0, 0, 32) #le thymio s'éclaire bleu end else # Sinon le thymio avance tout droit call leds.top(0, 0, 0) # le thymio ne s'éclaire d'aucune couleur end # Avancer droit sub drive if prox.ground.delta[0] > 150 and # Si les deux capteurs ne detectent plus la bande prox.ground.delta[1] > 150 then # Le thymio tourne a gauche ou a droite en fonction de la valeur de dir if dir == 1 then # Si dir = 1 alors la vitesse du moteur gauche augmente et celle du moteur droit diminue motor.left.target = motor + motor_change motor.right.target = motor - motor_change call leds.buttons(0,32,0,0) # la led sous la flèche droite s'allume else # Si dir = 0 alors la vitesse du moteur droit augmente et celle du moteur gauche diminue motor.left.target = motor - motor_change motor.right.target = motor + motor_change call leds.buttons(0,0,0,32) # la led sous la fléche de gauche s'allume end # Si l'un des deux capteurs trouve la bande,tourner le robot dans la direction appropriée elseif prox.ground.delta[0] > 150 then # Si le capteur au sol gauche ne detécte plus de bande, le moteur gauche augmente sa puissance tandis que le moteur droit la diminue, le thymio tourne alors vers la gauche motor.left.target = motor + motor_change motor.right.target = motor - motor_change call leds.buttons(0,32,0,0) # la led sous la flèche droite s'allume elseif prox.ground.delta[1] > 150 then # Sinon, si le capteur droit ne détecte plus la bande, La puissance du moteur gauche diminue et celle du moteur droit augmente, le Thymio tourne ves la droite motor.left.target = motor - motor_change motor.right.target = motor + motor_change call leds.buttons(0,0,0,32) # La led sous la flèche de gauche s'allume else # Sinon le Thymio avance tout droit, les deux moteurs on la même puissance motor.left.target = motor motor.right.target = motor call leds.buttons(32,0,0,0) # La led sous la flèche frontale s'allume end # évenement de proximité apparait,appel à 'subroutine drive' onevent prox if state == 1 then # Si le thymio est en marche, alors faire appel a sub drive callsub drive end