mirror of
https://forge.apps.education.fr/blender-edutech/ropy.git
synced 2024-01-27 08:23:20 +01:00
Jumeau numérique Maqueen suite
This commit is contained in:
parent
eba792b148
commit
bac3e837e0
BIN
ropy-29.blend
BIN
ropy-29.blend
Binary file not shown.
@ -30,11 +30,14 @@ def commandes():
|
|||||||
|
|
||||||
# Ecrire votre code ici ...
|
# Ecrire votre code ici ...
|
||||||
rp_jumeau('/dev/ttyACM0', 115200)
|
rp_jumeau('/dev/ttyACM0', 115200)
|
||||||
|
# rp_jumeau_config("50", "50", "90") # (vitesse, temps_avancer, temps_rotation)
|
||||||
|
|
||||||
rp_avancer()
|
|
||||||
rp_gauche()
|
rp_gauche()
|
||||||
|
rp_marquer()
|
||||||
rp_avancer()
|
rp_avancer()
|
||||||
|
rp_marquer()
|
||||||
rp_avancer()
|
rp_avancer()
|
||||||
|
rp_marquer()
|
||||||
|
|
||||||
rp_fin() # A garder
|
rp_fin() # A garder
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ card_description.update({"radar-card" : [rp_radar_title, rp_radar_text, rp_radar
|
|||||||
rp_twins_title="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_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 le jumeau réel par la liaison \n série (port et vitesse en baud) \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 """
|
rp_serie_msg(texte) \n -> Envoi un message \n \ntexte=rp_serie_rcpt() \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 """
|
# 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"
|
rp_twins_type="standard"
|
||||||
|
31
rp_lib.py
31
rp_lib.py
@ -135,6 +135,14 @@ def thread_gostore_stop():
|
|||||||
thread_stop(threads_gostore, "go store")
|
thread_stop(threads_gostore, "go store")
|
||||||
|
|
||||||
def rp_end():
|
def rp_end():
|
||||||
|
|
||||||
|
# Jumeau numérique
|
||||||
|
if scene.objects['Commands']['twins']:
|
||||||
|
serial_msg = "FI\n"
|
||||||
|
twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit )
|
||||||
|
rp_jumeau_close()
|
||||||
|
|
||||||
|
# Thread
|
||||||
if (debug_thread):
|
if (debug_thread):
|
||||||
print ("Thread commands is arrived.")
|
print ("Thread commands is arrived.")
|
||||||
time.sleep(0.125)
|
time.sleep(0.125)
|
||||||
@ -1084,7 +1092,6 @@ def rp_tempo (duration):
|
|||||||
while scene.objects['Commands']['time']<duration*(1/scene.objects['Commands']['speed']):
|
while scene.objects['Commands']['time']<duration*(1/scene.objects['Commands']['speed']):
|
||||||
# print("Temporization commands :",scene.objects['Terrain']['delay_cmd'])
|
# print("Temporization commands :",scene.objects['Terrain']['delay_cmd'])
|
||||||
time.sleep(0.001)
|
time.sleep(0.001)
|
||||||
# # pass
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Jumeau numérique
|
# Jumeau numérique
|
||||||
@ -1102,7 +1109,7 @@ def rp_jumeau(port, speed):
|
|||||||
scene.objects['Commands']['twins'] = True
|
scene.objects['Commands']['twins'] = True
|
||||||
scene.objects['Commands']['twins_port'] = port
|
scene.objects['Commands']['twins_port'] = port
|
||||||
scene.objects['Commands']['twins_speed'] = speed
|
scene.objects['Commands']['twins_speed'] = speed
|
||||||
scene.objects['Points-Twins-text']['Text'] = "Connection\nétablie"
|
scene.objects['Points-Twins-text']['Text'] = "Connection\nouverte :\n"+port+"\n à "+str(speed)+" baud"
|
||||||
print (twins_serial)
|
print (twins_serial)
|
||||||
else:
|
else:
|
||||||
scene.objects['Commands']['twins'] = False
|
scene.objects['Commands']['twins'] = False
|
||||||
@ -1123,10 +1130,26 @@ def getSerialOrNone(port,speed):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def rp_jumeau_close():
|
def rp_jumeau_close():
|
||||||
|
global twins_serial
|
||||||
twins_serial.close() # Fermer proprement le port série
|
twins_serial.close() # Fermer proprement le port série
|
||||||
scene.objects['Commands']['twins'] = False
|
scene.objects['Commands']['twins'] = False
|
||||||
scene.objects['Points-Twins'].setVisible(False,True)
|
scene.objects['Points-Twins-text']['Text'] = "Connection\nfermée"
|
||||||
scene.objects['Points-Twins-text'].setVisible(False,False)
|
|
||||||
|
# Configuration de la vitesse et des temps (deux caractères (0-99))
|
||||||
|
def rp_jumeau_config(speed, temps_avancer, temps_rotation):
|
||||||
|
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())
|
||||||
|
|
||||||
|
def rp_serie_msg(text):
|
||||||
|
global twins_serial
|
||||||
|
twins_serial.write(text.encode())
|
||||||
|
|
||||||
|
def rp_serie_rcpt():
|
||||||
|
global twins_serial
|
||||||
|
print ("Not yet implemented") # FIXME
|
||||||
|
return ("Not yet implemented")
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Fonction bas niveau
|
# Fonction bas niveau
|
||||||
|
@ -14,7 +14,8 @@ while True:
|
|||||||
while not uart.any(): # Attente d'un message
|
while not uart.any(): # Attente d'un message
|
||||||
pass
|
pass
|
||||||
|
|
||||||
display.scroll('ok : ') # Réception d'une message
|
display.scroll('ok : ') # Réception d'un message
|
||||||
content = uart.readline()
|
msg = uart.readline()
|
||||||
display.scroll(content[:-1]) # Affichage du message sans le '/n'
|
display.scroll(msg[:-1]) # Affichage du message sans le '/n'
|
||||||
|
display.scroll(str(msg[0])+" "+str(msg[1])) # Affichage du message en code ASCII
|
||||||
sleep(400)
|
sleep(400)
|
||||||
|
@ -16,11 +16,10 @@ import radio
|
|||||||
# Initialisation
|
# Initialisation
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
attente_image = Image("00000:00000:00900:00000:00000")
|
attente_image = Image("00000:00000:00300:00000:00000")
|
||||||
balise_image = Image("00300:03630:36963:03630:00300")
|
|
||||||
display.show(attente_image) # Témoin de fonctionnement
|
display.show(attente_image) # Témoin de fonctionnement
|
||||||
# display.scroll("Maqueen manette")
|
balise_image = Image("00300:03630:36963:03630:00300")
|
||||||
radio.config(group=1)
|
radio.config(group=1, queue=1, length=8)
|
||||||
radio.on()
|
radio.on()
|
||||||
|
|
||||||
uart.init(baudrate= 115200) # Initialisation du port série
|
uart.init(baudrate= 115200) # Initialisation du port série
|
||||||
@ -29,44 +28,73 @@ uart.init(baudrate= 115200) # Initialisation du port série
|
|||||||
# Écoute du port série en relayage vers la radio
|
# Écoute du port série en relayage vers la radio
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
while True:
|
temps_avancer=20
|
||||||
|
temps_tourner=20
|
||||||
|
temps_marquer=20
|
||||||
|
temps_forer=40
|
||||||
|
temps_colision=40
|
||||||
|
|
||||||
display.show(attente_image) # Témoin de fonctionnement
|
while True:
|
||||||
|
|
||||||
while not uart.any(): # Attente d'un message
|
while not uart.any(): # Attente d'un message
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# display.scroll('ok : ') # Réception d'une message
|
display.show(' ') # Sinon bug ?
|
||||||
msg = uart.readline()
|
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
|
# Avancer : AV
|
||||||
if msg[0] ==65 and msg[1] ==86 : # 65 (A) puis 86 (V)
|
if msg[0] ==65 and msg[1] ==86 : # Code ASCII : 65 (A) puis 86 (V)
|
||||||
display.show(Image.ARROW_N)
|
display.show(Image.ARROW_N)
|
||||||
|
radio.send("AV")
|
||||||
|
sleep(temps_avancer)
|
||||||
|
radio.send("ST")
|
||||||
|
|
||||||
# Reculer : RE
|
# Reculer : RE
|
||||||
if msg[0] ==82 and msg[1] ==69 : # 82 (R) puis 69 (E)
|
if msg[0] ==82 and msg[1] ==69 : # Code ASCII : 82 (R) puis 69 (E)
|
||||||
display.show(Image.ARROW_S)
|
display.show(Image.ARROW_S)
|
||||||
|
radio.send("RE")
|
||||||
|
sleep(temps_avancer)
|
||||||
|
radio.send("ST")
|
||||||
|
|
||||||
# Gauche : GA
|
# Gauche : GA
|
||||||
if msg[0] ==71 and msg[1] ==65 : # 71 (G) puis 65 (A)
|
if msg[0] ==71 and msg[1] ==65 : # Code ASCII : 71 (G) puis 65 (A)
|
||||||
display.show(Image.ARROW_W)
|
display.show(Image.ARROW_W)
|
||||||
|
radio.send("GA")
|
||||||
|
sleep(temps_tourner)
|
||||||
|
radio.send("ST")
|
||||||
|
|
||||||
# Droite : DR
|
# Droite : DR
|
||||||
if msg[0] ==68 and msg[1] ==69 : # 82 (D) puis 82 (R)
|
if msg[0] ==68 and msg[1] ==69 : # Code ASCII : 82 (D) puis 82 (R)
|
||||||
display.show(Image.ARROW_E)
|
display.show(Image.ARROW_E)
|
||||||
|
radio.send("DR")
|
||||||
|
sleep(temps_tourner)
|
||||||
|
radio.send("ST")
|
||||||
|
|
||||||
# Marquer : MA
|
# Marquer : MA
|
||||||
if msg[0] ==77 and msg[1] ==65 : # 77 (M) puis 65 (A)
|
if msg[0] ==77 and msg[1] ==65 : # Code ASCII : 77 (M) puis 65 (A)
|
||||||
display.show(balise_image)
|
display.show(balise_image)
|
||||||
|
sleep(temps_marquer)
|
||||||
|
|
||||||
# Forer : FO
|
# Forer : FO
|
||||||
if msg[0] ==70 and msg[1] ==79 : # 70 (F) puis 79 (O)
|
if msg[0] ==70 and msg[1] ==79 : # Code ASCII : 70 (F) puis 79 (O)
|
||||||
display.show(Image.DIAMOND)
|
display.show(Image.DIAMOND)
|
||||||
|
sleep(temps_forer)
|
||||||
|
|
||||||
# Colision : CO
|
# Colision : CO
|
||||||
if msg[0] ==67 and msg[1] ==79 : # 67 (C) puis 79 (O)
|
if msg[0] ==67 and msg[1] ==79 : # Code ASCII : 67 (C) puis 79 (O)
|
||||||
display.show(Image.SKULL)
|
display.show(Image.SKULL)
|
||||||
|
sleep(temps_colision)
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Fin : FI
|
||||||
|
if msg[0] ==70 and msg[1] ==73 : # Code ASCII : 70 (F) puis 73 (I)
|
||||||
|
display.show(attente_image) # Témoin de fonctionnement
|
||||||
|
|
||||||
sleep(400)
|
sleep(400)
|
||||||
|
@ -17,8 +17,8 @@ import radio
|
|||||||
# Initialisation
|
# Initialisation
|
||||||
# ###############################################################################
|
# ###############################################################################
|
||||||
|
|
||||||
led_image = Image('00000:00000:00900:00000:00000')
|
attente_image = Image("00000:00000:00900:00000:00000")
|
||||||
display.show(led_image) # Témoin de fonctionnement
|
display.show(attente_image) # Témoin de fonctionnement
|
||||||
radio.config(group=1, queue=1, length=8)
|
radio.config(group=1, queue=1, length=8)
|
||||||
radio.on()
|
radio.on()
|
||||||
|
|
||||||
@ -26,11 +26,15 @@ radio.on()
|
|||||||
# Boucle principale
|
# Boucle principale
|
||||||
# ###############################################################################
|
# ###############################################################################
|
||||||
|
|
||||||
while True:
|
vitesse = 50
|
||||||
|
distance = 50
|
||||||
|
angle = 90
|
||||||
|
|
||||||
v_avancer = 50
|
v_avancer = 50
|
||||||
v_tourner = 50
|
v_tourner = 50
|
||||||
v_tourner_faible = 25
|
v_tourner_faible = 25
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
# Lecture de l'ordre
|
# Lecture de l'ordre
|
||||||
ordre=radio.receive()
|
ordre=radio.receive()
|
||||||
@ -101,11 +105,11 @@ while True:
|
|||||||
|
|
||||||
# Stop
|
# Stop
|
||||||
if ordre=="ST":
|
if ordre=="ST":
|
||||||
display.show(led_image) # Témoin de fonctionnement
|
display.show(attente_image) # Témoin de fonctionnement
|
||||||
pin8.write_digital(0) # Led avant gauche
|
pin8.write_digital(0) # Led avant gauche
|
||||||
pin12.write_digital(0) # Led avant droit
|
pin12.write_digital(0) # Led avant droit
|
||||||
i2c.write(0x10, bytearray([0x00, 0x0, 0]))
|
i2c.write(0x10, bytearray([0x00, 0x0, 0]))
|
||||||
i2c.write(0x10, bytearray([0x02, 0x1, 0]))
|
i2c.write(0x10, bytearray([0x02, 0x1, 0]))
|
||||||
|
|
||||||
# Cadencement
|
# Cadencement
|
||||||
# sleep(10)
|
# sleep(100)
|
||||||
|
Loading…
Reference in New Issue
Block a user