#NC-BY-SA Georges Saliba 2023-03-03 temps = 0 temps_timer = 0 #etat = 0 : saisie de la durée ; #etat = 1 : saisie de la puissance du moteur gauche etat = 0 puis = 0 coef = 1 i = 0 #permet de rejouer le mouvement temps_copie = 0 puis_copie = 0 rejouer = 0 valide = 0 #ajustement si le robot n'avance pas tout droit. motordelta = 0 # puissance du moteur droit toujours à 100. motorRight = 100 #attente pour ne pas avoir de saisie multiples. delay = 1000 #variable d'état pour savoir 0 : pas d'iniialisation 1 ajustement du delta à #appliquer au moteur gauche pour le faire avancer à 100. initial = 0 leds_circle = [0, 0, 0, 0, 0, 0, 0, 0] leds_top = [0,0,0] #robot vert en dessous saiisie du temps posible état = 0, initial = 0 leds_bottom_left = [0,32,0] leds_bottom_right= [0,32,0] nf_sound_freq(60,-1) #avancer durant un temps calculé, le robot est violet en bas def avancer(): global leds_circle, etat, coef, i, motordelta, motorRight, puis, \ motor_left_target, motor_right_target, temps, timer_period, \ leds_bottom_left, leds_bottom_right etat = 0 leds_circle = [0,0,0,0,0,0,0,0] if puis + motordelta > 500: puis = 500 - motordelta if puis % 100 > 50: i = 1 else : i = 0 motor_left_target = coef * (puis + motordelta * (i + puis // 100)) motor_right_target = motorRight timer_period[0] = temps leds_bottom_left = [32,0,32] leds_bottom_right= [32,0,32] # change l'état et permet de saisir la puissance du moteur gauche def change(): global etat, leds_circle,leds_bottom_left, leds_bottom_right etat = 1 leds_circle = [0, 0, 0, 32, 32, 32, 0, 0] leds_bottom_left = [32,0,0] leds_bottom_right= [32,0,0] @onevent def buttons(): global leds_bottom_right, leds_bottom_left, leds_circle, valide, initial, \ motorRight, motordelta, delay, temps_copie, puis_copie, rejouer, leds_top,\ etat, puis, motor_left_target, motor_right_target, temps, timer_period # augmente la durée du mouvement de 10 ms if button_right and etat == 0 and initial == 0 : #permet de ne saisir qu'une valeur à la fois (contre la capture à la fréquence donnée); if valide == 0: valide = 1 temps = temps + 10 leds_top = [11, 0, 0] leds_circle = [0, 0, 0, 0, 0, 0, 0, 32] timer_period[1] = delay print(temps , puis) if button_right and etat == 1 and initial == 0: if valide == 0: valide = 1 puis = puis + 1 leds_top = [11, 0, 0] leds_circle = [0, 0, 0, 32, 32, 32, 0, 32] timer_period[1] = delay print(temps , puis) if button_backward and etat == 0 and initial == 0: if valide == 0: valide = 1 temps = temps + 100 leds_top = [0, 22, 0] leds_circle = [32, 0, 0, 0, 0, 0, 0, 32] timer_period[1] = delay print(temps , puis) if button_backward and etat == 1 and initial == 0: if valide == 0: valide = 1 puis = puis + 10 leds_top = [0, 22, 0] leds_circle = [32, 0, 0, 32, 32, 32, 0, 32] timer_period[1] = delay print(temps , puis) if button_left and etat == 0 and initial == 0: leds_top = [0, 0, 32] if valide == 0: valide = 1 temps = temps + 1000 leds_circle = [32, 32, 0, 0, 0, 0, 0, 32] timer_period[1] = delay print(temps , puis) if button_left and etat == 1 and initial == 0: leds_top = [0, 0, 32] if valide == 0: valide = 1 puis = puis + 100 leds_circle = [32, 32, 0, 32, 32, 32, 0, 32] timer_period[1] = delay print(temps , puis) if button_left and puis == 0 and initial == 1: if valide == 0: valide = 1 motordelta = motordelta - 1 leds_top = [32,20,32] if motordelta > 0: leds_circle = [0, 12, 0, 0, 0, 0, 32, 0] elif motordelta == 0: leds_circle = [32, 0, 0, 0, 0, 0, 32, 0] else: leds_circle = [0, 0, 0, 0, 0, 0, 32, 12] timer_period[1] = delay print(motordelta) # droite si le robot va trop vers la gauche if button_right and puis == 0 and initial == 1: if valide == 0: valide = 1 motordelta = motordelta + 1 leds_top = [32,20,32] if motordelta > 0: leds_circle = [0, 12, 32, 0, 0, 0, 0, 0] elif motordelta == 0: leds_circle = [32, 0, 32, 0, 0, 0, 0, 0] else: leds_circle = [0, 0, 32, 0, 0, 0, 0, 12] timer_period[1] = delay print(motordelta) if button_left and button_right and initial == 1: initial = 0 leds_circle = [32, 32, 32, 32, 32, 32, 32, 32] timer_period[1] = delay print(initial) if button_center: motor_left_target = 0 motor_right_target = 0 temps = 0 puis = 0 etat = 0 rejouer = 0 leds_top = [0, 0, 0] leds_circle = [0, 0, 0, 0, 0, 0, 0, 0] initial = 0 leds_bottom_left = [0,32,0] leds_bottom_right= [0,32,0] print(initial) if button_forward and temps!=0 and etat == 1: temps_copie = temps puis_copie = puis rejouer = 1 print(temps, puis) avancer() if button_forward and temps!=0 and rejouer == 1: temps = temps_copie puis = puis_copie avancer() @onevent def prox(): global timer_period, coef, leds_circle, delay, etat, initial, \ leds_bottom_left, leds_bottom_right, leds_top if prox_horizontal[5] >= 3000 and prox_horizontal[6] >= 3000 and \ etat == 0 and initial !=1 : timer_period[1] = delay change() leds_circle = [0, 0, 0, 32, 32, 32, 0, 0] #réglage de la correction pour le moteur gauche if prox_horizontal[4] >= 3000 and prox_horizontal[0] >= 3000 and puis == 0 \ and initial == 0: initial = 1 leds_circle = [0, 0, 32, 0, 0, 0, 32, 0] leds_bottom_left = [32,0,0] leds_bottom_right= [0,32,0] leds_top = [32,20,32] timer_period[1] = delay*2 #validation du réglage if prox_horizontal[3] >= 3000 and prox_horizontal[1] >= 3000 and puis == 0 \ and initial == 1: initial = 0 leds_circle = [32, 32, 32, 32, 32, 32, 32, 32] if coef > 0: leds_bottom_left = [0,32,0] leds_bottom_right= [0,32,0] else: leds_bottom_left = [32,0,0] leds_bottom_right= [32,0,0] timer_period[1] = delay print(motordelta) # demi-tour if prox_horizontal[2] >= 3000 and prox_horizontal[5] >= 3000 and puis == 0 \ and initial == 0: coef = - coef if coef > 0: leds_circle = [32, 0, 0, 0, 0, 0, 0, 0] leds_bottom_left = [0,32,0] leds_bottom_right= [0,32,0] else: leds_circle = [0, 0, 0, 0, 32, 0, 0, 0] leds_bottom_left = [32,0,0] leds_bottom_right= [32,0,0] timer_period[1] = delay*2 print(coef) @onevent def timer0(): global motor_left_target, motor_right_target, leds_circle timer_period[0] = 0 motor_left_target = 0 motor_right_target = 0 leds_circle = [0, 0, 0, 0, 0, 0, 0, 0] @onevent def timer1(): global leds_top, valide, initial, leds_circle leds_top = [0, 0, 0] valide = 0 timer_period[1] = 0