diff --git a/ropy-29.blend b/ropy-29.blend index ac0ca8c..a3b4318 100644 Binary files a/ropy-29.blend and b/ropy-29.blend differ diff --git a/rp_cmd.py b/rp_cmd.py index 89c7726..729bfd5 100644 --- a/rp_cmd.py +++ b/rp_cmd.py @@ -30,14 +30,15 @@ def commandes(): # Ecrire votre code ici ... rp_jumeau('/dev/ttyACM0', 115200) - # rp_jumeau_config("50", "50", "90") # (vitesse, temps_avancer, temps_rotation) + rp_jumeau_config(50, 20, 90) # (vitesse, temps_avancer, temps_rotation) + rp_tempo(1) rp_gauche() - rp_marquer() + # rp_marquer() rp_avancer() - rp_marquer() - rp_avancer() - rp_marquer() + # rp_marquer() + # rp_avancer() + # rp_marquer() rp_fin() # A garder diff --git a/rp_lib.py b/rp_lib.py index 4e351b8..7c4c890 100644 --- a/rp_lib.py +++ b/rp_lib.py @@ -1106,6 +1106,7 @@ def rp_jumeau(port, speed): twins_serial = getSerialOrNone(port,speed) if twins_serial is not None: + # twins_serial.set_buffer_size(rx_size = 12800, tx_size = 12800) scene.objects['Commands']['twins'] = True scene.objects['Commands']['twins_port'] = port scene.objects['Commands']['twins_speed'] = speed @@ -1125,7 +1126,8 @@ def rp_jumeau(port, speed): def getSerialOrNone(port,speed): try: - return serial.Serial(port,speed) + # return serial.Serial(port,speed, bytesize=100) + return serial.Serial(port,speed) except: return None @@ -1135,12 +1137,29 @@ def rp_jumeau_close(): scene.objects['Commands']['twins'] = False scene.objects['Points-Twins-text']['Text'] = "Connection\nfermée" -# Configuration de la vitesse et des temps (deux caractères (0-99)) -def rp_jumeau_config(speed, temps_avancer, temps_rotation): +# Configuration de la vitesse et des temps +def rp_jumeau_config(speed, temps_avancer, temps_tourner): global twins_serial if scene.objects['Commands']['twins']: - serial_msg = "CF"+str(speed)+str(temps_avancer)+str(temps_tourner)+"\n" - twins_serial.write(serial_msg.encode()) + serial_msg1 = "CF\n" + # print (serial_msg1) + twins_serial.write(serial_msg1.encode()) + rp_tempo (1) + serial_msg2 = str(speed)+"\n" + # print (serial_msg2) + twins_serial.write(serial_msg2.encode()) + rp_tempo (1) + serial_msg2 = str(temps_avancer)+"\n" + # print (serial_msg2) + twins_serial.write(serial_msg2.encode()) + rp_tempo (1) + serial_msg2 = str(temps_tourner)+"\n" + # print (serial_msg2) + twins_serial.write(serial_msg2.encode()) + rp_tempo (1) + serial_msg1 = "FC\n" + # print (serial_msg1) + twins_serial.write(serial_msg1.encode()) def rp_serie_msg(text): global twins_serial diff --git a/twins/rp_maqueen-relay.py b/twins/rp_maqueen-relay.py index b0d67c5..8db853b 100644 --- a/twins/rp_maqueen-relay.py +++ b/twins/rp_maqueen-relay.py @@ -19,7 +19,7 @@ import radio attente_image = Image("00000:00000:00300:00000:00000") display.show(attente_image) # Témoin de fonctionnement balise_image = Image("00300:03630:36963:03630:00300") -radio.config(group=1, queue=1, length=8) +radio.config(group=1, queue=4, length=8) radio.on() uart.init(baudrate= 115200) # Initialisation du port série @@ -87,11 +87,21 @@ while True: # Configuration : CF if msg[0] ==67 and msg[1] ==70 : # Code ASCII : 67 (C) puis 70 (F) - # display.scroll ("Configuration :", msg[2],msg[3], msg[4],msg[5], msg[6],msg[7]) - display.scroll ("Configuration :", msg[2:-1]) - radio.send(msg[:-1]) - sleep(10) - # FIXME + display.scroll ("CF") + radio.send("CF") + + # Boucle d'écoute spécifique à la configuration + while True: + while not uart.any(): # Attente d'un message + pass + display.show(' ') + msg = uart.readline() + if msg[0] ==70 and msg[1] ==67 : # Code ASCII : 70 (F) puis 67 (C) -> sortie de la configuration + break + # display.scroll (msg[:-1]) + radio.send(str(msg[:-1])) + # display.scroll ("FC") + radio.send("FC") # Fin : FI if msg[0] ==70 and msg[1] ==73 : # Code ASCII : 70 (F) puis 73 (I) diff --git a/twins/rp_maqueen-robot.py b/twins/rp_maqueen-robot.py index 7758517..6798506 100755 --- a/twins/rp_maqueen-robot.py +++ b/twins/rp_maqueen-robot.py @@ -2,6 +2,8 @@ from microbit import * from machine import * import music import radio +import math +import time ############################################################################### # rp_maqueen-robot.py @@ -19,97 +21,183 @@ import radio attente_image = Image("00000:00000:00900:00000:00000") display.show(attente_image) # Témoin de fonctionnement -radio.config(group=1, queue=1, length=8) +radio.config(group=1, queue=4, length=8) radio.on() -# ############################################################################### -# Boucle principale -# ############################################################################### - vitesse = 50 distance = 50 angle = 90 -v_avancer = 50 -v_tourner = 50 -v_tourner_faible = 25 +vmax_roue = 85.5 # Vitesse maxi des roues en tr/min +diam_roue = 43 # Diamètre des roues en mm +dist_essieu = 70 # Distance entre les roues en mm + +# ############################################################################### +# Boucle principale +# ############################################################################### while True: # Lecture de l'ordre ordre=radio.receive() - # Avancer + # Configuration + if ordre=="CF": + display.scroll("CF") + i=1 + while True: + conf=radio.receive() + if conf=="FC": # Fin de la configuration + # display.show(attente_image) # Témoin de fonctionnement + break + if conf is not None: + if i != 1: + text = str(i) + " : "+str(conf[2:-1]) + # display.scroll(text) + if i == 2: # Configuration de la vitesse + vitesse = int(str(conf[2:-1])) + if i == 3: # Configuration de la distance + distance = int(str(conf[2:-1])) + if i == 4: # Configuration de l'angle + angle = int(str(conf[2:-1])) + i+=1 + + # Avancer d'un pas if ordre=="AV": - display.show(Image.ARROW_N) + + display.show(Image.ARROW_N) # Afficher flèche avancer pin8.write_digital(1) # Led avant gauche pin12.write_digital(1) # Led avant gauche - i2c.write(0x10, bytearray([0x00, 0x0, v_avancer])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x0, v_avancer])) # Moteur droit + i2c.write(0x10, bytearray([0x00, 0x0, vitesse])) # Avance moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, vitesse])) # Avance moteur droit + + v_roue=(vmax_roue/255)*vitesse + v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire + time.sleep(distance/v_lin) + + i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit + pin8.write_digital(0) # Led avant gauche + pin12.write_digital(0) # Led avant gauche + display.clear() # Effacer matrice de leds + + # display.show(Image.ARROW_N) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(1) # Led avant gauche + # i2c.write(0x10, bytearray([0x00, 0x0, v_avancer])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x0, v_avancer])) # Moteur droit # Reculer if ordre=="RE": - display.show(Image.ARROW_S) + + display.show(Image.ARROW_S) # Afficher flèche reculer pin8.write_digital(1) # Led avant gauche pin12.write_digital(1) # Led avant gauche - i2c.write(0x10, bytearray([0x00, 0x1, v_avancer])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x1, v_avancer])) # Moteur droit + i2c.write(0x10, bytearray([0x00, 0x1, vitesse])) # Avance moteur gauche + i2c.write(0x10, bytearray([0x02, 0x1, vitesse])) # Avance moteur droit + + v_roue=(vmax_roue/255)*vitesse + v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire + time.sleep(distance/v_lin) + + i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit + pin8.write_digital(0) # Led avant gauche + pin12.write_digital(0) # Led avant gauche + display.clear() # Effacer matrice de leds + + # display.show(Image.ARROW_S) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(1) # Led avant gauche + # i2c.write(0x10, bytearray([0x00, 0x1, v_avancer])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x1, v_avancer])) # Moteur droit # Gauche if ordre=="GA": - display.show(Image.ARROW_W) + display.show(Image.ARROW_E) pin8.write_digital(1) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit + i2c.write(0x10, bytearray([0x00, 0x1, vitesse])) # Avance moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, vitesse])) # Avance moteur droit + + v_roue=(vmax_roue/255)*vitesse + v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire + angle2=(angle/4)*(2*math.pi/360) + time.sleep((dist_essieu*angle2)/v_lin) + + i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit + pin8.write_digital(0) # Led avant gauche + display.clear() # Effacer matrice de leds + + # display.show(Image.ARROW_W) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit # Avancer + gauche - if ordre=="AG": - display.show(Image.ARROW_W) - pin8.write_digital(1) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x0, v_tourner_faible])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit + # if ordre=="AG": + # display.show(Image.ARROW_W) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x0, v_tourner_faible])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x0, v_tourner])) # Moteur droit # Reculer + gauche - if ordre=="RG": - display.show(Image.ARROW_W) - pin8.write_digital(1) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x1, v_tourner_faible])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x1, v_tourner])) # Moteur droit + # if ordre=="RG": + # display.show(Image.ARROW_W) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x1, v_tourner_faible])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x1, v_tourner])) # Moteur droit # Droite if ordre=="DR": - display.show(Image.ARROW_E) - pin8.write_digital(0) # Led avant gauche + + display.show(Image.ARROW_W) pin12.write_digital(1) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Moteur droit + i2c.write(0x10, bytearray([0x00, 0x0, vitesse])) # Avance moteur gauche + i2c.write(0x10, bytearray([0x02, 0x1, vitesse])) # Avance moteur droit + + v_roue=(vmax_roue/255)*vitesse + v_lin = ((v_roue/60)*2*math.pi)*(diam_roue/2) # Vitesse linéaire + angle2=(angle/4)*(2*math.pi/360) + time.sleep((dist_essieu*angle2)/v_lin) + + i2c.write(0x10, bytearray([0x00, 0x0, 0])) # Stop moteur gauche + i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Stop moteur droit + pin12.write_digital(0) # Led avant droit + display.clear() # Effacer matrice de leds + + # display.show(Image.ARROW_E) + # pin8.write_digital(0) # Led avant gauche + # pin12.write_digital(1) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x0, 0])) # Moteur droit # Avancer + droite - if ordre=="AD": - display.show(Image.ARROW_W) - pin8.write_digital(1) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x0, v_tourner_faible])) # Moteur droit + # if ordre=="AD": + # display.show(Image.ARROW_W) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x0, v_tourner])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x0, v_tourner_faible])) # Moteur droit # Reculer + droite - if ordre=="RD": - display.show(Image.ARROW_W) - pin8.write_digital(1) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x1, v_tourner])) # Moteur gauche - i2c.write(0x10, bytearray([0x02, 0x1, v_tourner_faible])) # Moteur droit + # if ordre=="RD": + # display.show(Image.ARROW_W) + # pin8.write_digital(1) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x1, v_tourner])) # Moteur gauche + # i2c.write(0x10, bytearray([0x02, 0x1, v_tourner_faible])) # Moteur droit # Stop - if ordre=="ST": - display.show(attente_image) # Témoin de fonctionnement - pin8.write_digital(0) # Led avant gauche - pin12.write_digital(0) # Led avant droit - i2c.write(0x10, bytearray([0x00, 0x0, 0])) - i2c.write(0x10, bytearray([0x02, 0x1, 0])) + # if ordre=="ST": + # display.show(attente_image) # Témoin de fonctionnement + # pin8.write_digital(0) # Led avant gauche + # pin12.write_digital(0) # Led avant droit + # i2c.write(0x10, bytearray([0x00, 0x0, 0])) + # i2c.write(0x10, bytearray([0x02, 0x1, 0])) # Cadencement # sleep(100)