diff --git a/ropy-29.blend b/ropy-29.blend index 1b72aa0..faab754 100644 Binary files a/ropy-29.blend and b/ropy-29.blend differ diff --git a/rp_config.xml b/rp_config.xml index 64254cd..303665e 100644 --- a/rp_config.xml +++ b/rp_config.xml @@ -1,6 +1,6 @@ - 4.0 + 1.0 False 0.0057830810546875 @@ -14,7 +14,7 @@ 1 - 2 + 1 False @@ -22,4 +22,4 @@ False False - \ No newline at end of file + diff --git a/rp_doc.py b/rp_doc.py index 35426a8..dde1b25 100644 --- a/rp_doc.py +++ b/rp_doc.py @@ -80,8 +80,10 @@ card_description.update({"radar-card" : [rp_radar_title, rp_radar_text, rp_radar # Jumeau numérique rp_twins_title="Jumeau numérique" rp_twins_text=""" Via une liaison série, Ropy peut être \n le jumeau numérique d'un robot réel. \n - rp_jumeau(port, vitesse) \n -> Active la liaison série sur le port \n et à la vitesse (baud) spécifiés. \n - Message envoyé (asynchrone) : \n avancer : a, reculer : r, droite : d, \n gauche g, marquer : m et forer : f \n\n\n """ + rp_jumeau(port, vitesse) \n -> Active le jumeau réel par la liaison \n série (port et vitesse en baud) \n +rp_serie_msg(texte) \n -> Envoi un message \n \ntexte=rp_serie_rcp() \n -> Reçoit un message \n\n\n """ + +# Message envoyé (asynchrone) : \n avancer : a, reculer : r, droite : d, \n gauche g, marquer : m et forer : f \n\n\n """ rp_twins_type="standard" card_description.update({"twins-card" : [rp_twins_title, rp_twins_text, rp_twins_type]}) diff --git a/rp_lib.py b/rp_lib.py index 954deb3..8afa1bc 100644 --- a/rp_lib.py +++ b/rp_lib.py @@ -20,9 +20,9 @@ import rp_map1 as rp_map # Map definition # @authors: Philippe Roy # @copyright: Copyright (C) 2020-2022 Philippe Roy # @license: GNU GPL -# +# # Bibliothèque des actions du robot -# +# # Ropy est destiné à la découverte de la programmation procédurale et du language Python. # A travers plusieurs challenges, donc de manière graduée, les élèves vont apprendre à manipuler les structures algorithmiques de base et à les coder en Python. ############################################################################### @@ -206,8 +206,8 @@ def rp_avancer (): print ("rp_avancer()") scene.objects['Points']['step'] +=1 if scene.objects['Commands']['twins']: - serial_msg = "a\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "AV\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Animation rapide if scene.objects['Commands']['speed'] >= 10 and scene.objects['Points']['step']> 2: # A tendance à planter sur les premiers mouvements en rapide + balisage @@ -327,8 +327,8 @@ def rp_reculer (): print ("rp_reculer()") scene.objects['Points']['step'] +=1 if scene.objects['Commands']['twins']: - serial_msg = "r\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "RE\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Animation rapide if scene.objects['Commands']['speed'] >= 10 and scene.objects['Points']['step']> 2: # A tendance à planter sur les premiers mouvements en rapide + balisage @@ -396,8 +396,8 @@ def rp_gauche (): scene.objects['Points']['step'] +=1 step=math.pi/2 # Pas angulaire if scene.objects['Commands']['twins']: - serial_msg = "g\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "GA\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Animation rapide if scene.objects['Commands']['speed'] >= 10: @@ -445,8 +445,8 @@ def rp_droite (): scene.objects['Points']['step'] +=1 step=math.pi/2 # Pas angulaire if scene.objects['Commands']['twins']: - serial_msg = "d\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "DR\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Rapide if scene.objects['Commands']['speed'] >= 10: @@ -488,13 +488,6 @@ def rp_marquer (): if obj['stop']: return False - # Points, console et jumeau numérique - if (debug_mvt): - print ("rp_marquer() -> balise #"+ str(len(scene.objects['Terrain']['map_tile_beacon']))) - if scene.objects['Commands']['twins']: - serial_msg = "m\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) - rp_tempo (0.1) x = obj.worldPosition.x y = obj.worldPosition.y z = obj.worldPosition.z @@ -504,7 +497,15 @@ def rp_marquer (): print ("Case déjà marquée !") return False + # Points, console et jumeau numérique + if (debug_mvt): + print ("rp_marquer() -> balise #"+ str(len(scene.objects['Terrain']['map_tile_beacon']))) + if scene.objects['Commands']['twins']: + serial_msg = "MA\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + # Posage + rp_tempo (0.1) if scene.objects['Points']['upgrade_beacon']: beacon_max= 200 else: @@ -762,8 +763,8 @@ def rover_colision_montain (back): # Jumeau numérique if scene.objects['Commands']['twins']: - serial_msg = "c\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "CO\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Animation start = 1 @@ -822,8 +823,8 @@ def rover_colision_station (back): # Jumeau numérique if scene.objects['Commands']['twins']: - serial_msg = "c\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "CO\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Animation start = 1 @@ -930,7 +931,7 @@ def rover_goal (): scene.objects['Points']['level']+=1 ## -# Forage +# Forage ## def rover_drill (x,y): @@ -990,8 +991,8 @@ def rover_drill (x,y): # Jumeau numérique if scene.objects['Commands']['twins']: - serial_msg = "f\n" - serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) + serial_msg = "FO\n" + twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) # Tuile for i in range (10): @@ -1092,6 +1093,7 @@ def rp_tempo (duration): # Paramétrage de la communication avec la carte de communication (Arduino, Micro:bit) def rp_jumeau(port, speed): + global twins_serial scene.objects['Points-Twins'].setVisible(True,True) scene.objects['Points-Twins-text'].setVisible(True,False) diff --git a/twins/rp_maqueen-relay.py b/twins/rp_maqueen-relay.py index 1fc503f..36e5562 100644 --- a/twins/rp_maqueen-relay.py +++ b/twins/rp_maqueen-relay.py @@ -1,5 +1,6 @@ from microbit import uart, sleep from microbit import * +import radio ############################################################################### # rp_twins_maqueen-relay.py @@ -15,8 +16,9 @@ from microbit import * # Initialisation ############################################################################### -led_image = Image("00000:00000:00900:00000:00000") -display.show(led_image) # Témoin de fonctionnement +attente_image = Image("00000:00000:00900:00000:00000") +balise_image = Image("00300:03630:36963:03630:00300") +display.show(attente_image) # Témoin de fonctionnement # display.scroll("Maqueen manette") radio.config(group=1) radio.on() @@ -29,10 +31,42 @@ uart.init(baudrate= 115200) # Initialisation du port série while True: + display.show(attente_image) # Témoin de fonctionnement + while not uart.any(): # Attente d'un message - pass - - display.scroll('ok : ') # Réception d'une message - content = uart.readline() - display.scroll(content[:-1]) # Affichage du message sans le '/n' + pass + + # display.scroll('ok : ') # Réception d'une message + msg = uart.readline() + # display.scroll(msg[:-1]) # Affichage du message texte sans le '/n' + # display.scroll(str(msg[0])+" "+str(msg[1])) # Affichage du message en code ASCII + + # Avancer : AV + if msg[0] ==65 and msg[1] ==86 : # 65 (A) puis 86 (V) + display.show(Image.ARROW_N) + + # Reculer : RE + if msg[0] ==82 and msg[1] ==69 : # 82 (R) puis 69 (E) + display.show(Image.ARROW_S) + + # Gauche : GA + if msg[0] ==71 and msg[1] ==65 : # 71 (G) puis 65 (A) + display.show(Image.ARROW_W) + + # Droite : DR + if msg[0] ==68 and msg[1] ==69 : # 82 (D) puis 82 (R) + display.show(Image.ARROW_E) + + # Marquer : MA + if msg[0] ==77 and msg[1] ==65 : # 77 (M) puis 65 (A) + display.show(balise_image) + + # Forer : FO + if msg[0] ==70 and msg[1] ==79 : # 70 (F) puis 79 (O) + display.show(Image.DIAMOND) + + # Colision : CO + if msg[0] ==67 and msg[1] ==79 : # 67 (C) puis 79 (O) + display.show(Image.SKULL) + sleep(400) diff --git a/twins/rp_maqueen-robot.py b/twins/rp_maqueen-robot.py index 54133a7..a4bdbe2 100755 --- a/twins/rp_maqueen-robot.py +++ b/twins/rp_maqueen-robot.py @@ -11,8 +11,6 @@ import radio # @authors: Philippe Roy # @copyright: Copyright (C) 2022 Philippe Roy # @license: GNU GPL -# -# Programme d'execution des ordres de la manette pour le robot Maqueen# ############################################################################### # ############################################################################### @@ -20,7 +18,7 @@ import radio # ############################################################################### led_image = Image('00000:00000:00900:00000:00000') -display.show(led_image) # Témoin de fonctionnement +display.show(led_image) # Témoin de fonctionnement radio.config(group=1, queue=1, length=8) radio.on()