motor_left_target = 500
motor_right_target = 500
puis cliquer sur le petit bouton "play" ▶ à droite dans la barre d'outils.
motor_left_target = 500
motor_right_target = -500
nf_leds_top(32, 16, 0)
Thymio se colore en orange.
Le code est en RVB et les limites sont de 0 à 32 pour chaque couleur. print(prox_horizontal[2])
Lancer l'exécution du programme. S'il n'y a rien devant le robot, dans la console en bas à gauche, doit s'afficher le nombre 0.
speed = 100 # ne pas mettre de valeur non entière
Pour une fonction liée aux capteurs de proximité :
@onevent
def prox():
prox_horizontal
. La figure montre que par exemple, le capteur avant central correspond à la variable prox_horizontal[2]
.
prox_horizontal[6.]
speed
.
if prox_horizontal[2] < 3500:
motor_left_target = speed
motor_right_terget = speed
la variable motor_left_target
fixe la vitesse de rotation du moteur gauche, motor_right_target
celle du moteur droit.
Puis on traite le cas où un obstacle est détecté (valeur du capteur >= 3500).
else:
motor_left_target = 0
motor_right_target = 0
prox
, donc la fréquence à laquelle les vitesse sont ajuster est de 10Hz, soit toutes les 100ms.
var = ...
) et on les déclare globales au début de la fonction :
@onevent
def prox():
global motor_left_target, motor_right_target
button_center
button_left
button_forward
button_right
button_backward
nf_leds_top(r, v, b)
qui prend en paramètres 3 antiers : r, v et b représentant les composantes rougre, verte ou blues. Ils varient entre 0 et 32 inclus.
@onevent
def buttons():
global nf_leds_top
if button_left == 1:
nf_leds_top(32, 0, 0)
buttons()
étant parcourue 20 fois par seconde, si on appuie sur le bouton gauche if button_left == 1
est évalué à vrai et les LEDs du dessus s'allume en rouge.
leds_top = [32, 16, 0]
.
r = 0
v = 0
b = 0
Assignons à chaque bouton un rôle :
nf_sound_freq(440, 30)
timer0
et timer1
accessibles grâce à :
timer_period[0] = 2000 # en ms
. Cette affectation peut être placée
n'importe où dans le code.
@onevent
def timer0():
code à exécuter
@onevent
def tap():
Contrairement aux autres fonctions qui sont appelées en boucle, cette fonction est exécutée seulement en cas de choc.
@onevent
def tap():
nf_leds_top(32, 16, 0)
prox_ground_delta[0]
(capteur gauche) et
prox_ground_delta[1]
(capteur droite). Ce sont les 2 éléments du tableau
prox_ground_delta
.
[0, 1000]
. Ils fonctionnent comme les
autres par réflexion d'un rayon infra-rouge. Donc :
prox_ground_delta[0 ou 1]
prend une valeur proche de 1000.prox_ground_delta[0 ou 1]
prend une valeur proche de 0.capteur gauche | capteur droit | situation | action |
---|---|---|---|
noir | noir | le robot est sur la ligne | tout droit |
noir | blanc | le reobot sort de la ligne par la droite | tourner légèrement à gauche |
blanc | noir | le robot sort de la ligne par la gauche | tourner légèrement à droite |
blanc | blanc | le robot est complètement sorti de la ligne | pivoter pour reprendre la ligne |
speed = 150
@onevent
def prox():
global motor_left_target, motor_right_target
if prox_ground_delta[0] < 400 and prox_ground_delta[1] < 400: # les 2 capteurs sont sur la ligne noire
motor_right_target =speed
motor_left_target =speed
elif prox_ground_delta[0] < 400 and prox_ground_delta[1] >400:# le capteur gauche est sur la ligne mais pas le droit
motor_left_target = -speed//5
motor_right_target = speed
elif prox_ground_delta[0] > 400 and prox_ground_delta[1] < 400:# le capteur droit est sur la ligne mais pas le gauche
motor_left_target = ............
motor_right_target = ...........
elif prox_ground_delta[0] > 400 and prox_ground_delta[1] > 400:# aucun capteur sur la ligne
motor_left_target = speed
motor_right_target = -speed