diff --git a/ropy-29.blend b/ropy-29.blend index f16d74a..9998adb 100644 Binary files a/ropy-29.blend and b/ropy-29.blend differ diff --git a/rp.py b/rp.py index ff3a872..d9cb09c 100644 --- a/rp.py +++ b/rp.py @@ -11,7 +11,6 @@ import webbrowser # Lien internet import threading # Multithreading import xml.etree.ElementTree as ET # Creating/parsing XML file import runpy # Execution de script Python légère (sans import) -import serial # Liaison série (jumeau numérique) import rp_map1 as rp_map # Map definition import rp_doc # Documentation @@ -338,16 +337,6 @@ def terrain_grid_anim (): if scene.objects['Grid-u']['timer']>= 1: scene.objects['Grid-u']['anim'] = False -############################################################################### -# Jumeau -############################################################################### - -def twins_listen(): - print ("a") - serial_tmp= serial.Serial(scene.objects['Commands']['twins_port'],scene.objects['Commands']['twins_speed']) - serial_msg = str(serial_tmp.readline()) - print (serial_msg) - ############################################################################### # Sons ############################################################################### @@ -1033,6 +1022,9 @@ def tablet_close (): if scene.objects['Commands']['twins']: scene.objects['Points-Twins'].setVisible(True,True) scene.objects['Points-Twins-text'].setVisible(True,False) + else: + scene.objects['Points-Twins'].setVisible(False,True) + scene.objects['Points-Twins-text'].setVisible(False,False) scene.objects['Commands'].setVisible(True,True) scene.objects['Camera'].setVisible(True,True) scene.active_camera = scene.objects["Camera"] @@ -1277,6 +1269,9 @@ def store_close(): if scene.objects['Commands']['twins']: scene.objects['Points-Twins'].setVisible(True,True) scene.objects['Points-Twins-text'].setVisible(True,False) + else: + scene.objects['Points-Twins'].setVisible(False,True) + scene.objects['Points-Twins-text'].setVisible(False,False) scene.objects['Commands'].setVisible(True,True) scene.objects['Camera'].setVisible(True,True) scene.active_camera = scene.objects["Camera"] diff --git a/rp_cmd.py b/rp_cmd.py index b33e254..46d9581 100644 --- a/rp_cmd.py +++ b/rp_cmd.py @@ -3,8 +3,8 @@ import time from rp_lib import * # Bibliothèque Ropy ############################################################################### -# rp_cmd.py -# @title: Commandes pour le Rover Ropy +# rp_cmd-microbit.py +# @title: Exemple pour le lecteur du port série Micro:bit # @project: Ropy (Blender-EduTech) ############################################################################### @@ -22,10 +22,6 @@ from rp_lib import * # Bibliothèque Ropy # Fonctions ############################################################################### -def mrp_avancer(): - rp_avancer() - rp_marquer() - ############################################################################### # Commandes ############################################################################### @@ -33,43 +29,7 @@ def mrp_avancer(): def commandes(): # Ecrire votre code ici ... - rp_jumeau('/dev/ttyACM1', 115200) - rp_tempo(1) - print (1) - rp_tempo(1) - print (2) - rp_tempo(1) - print (3) - rp_tempo(1) - print (4) - - # rp_serie_msg("Go !") - # txt ="" - # while True: - # rp_tempo(0.1) - # pass - # txt=rp_serie_rcpt() - # print (txt) - # if txt !="": - # print (txt) - # break - - # rp_jumeau_config(50, 20, 90) # (vitesse, temps_avancer, temps_rotation) - # rp_tempo(1) - - # rp_gauche() - # mrp_avancer() - # rp_droite() - # mrp_avancer() - # mrp_avancer() - # mrp_avancer() - # mrp_avancer() - # rp_droite() - # mrp_avancer() - # mrp_avancer() - - rp_jumeau_close() rp_fin() # A garder ############################################################################### diff --git a/rp_config.xml b/rp_config.xml index 2555e14..52fb425 100644 --- a/rp_config.xml +++ b/rp_config.xml @@ -3,9 +3,9 @@ 1.0 False - -10.94022274017334 - -40.040931701660156 - 30.490596771240234 + -1.8592177629470825 + -33.43065643310547 + 27.0482177734375 1280 diff --git a/rp_lib.py b/rp_lib.py index d396d48..02205d5 100644 --- a/rp_lib.py +++ b/rp_lib.py @@ -1112,26 +1112,25 @@ def rp_jumeau(port, speed): global twins_serial scene.objects['Points-Twins'].setVisible(True,True) scene.objects['Points-Twins-text'].setVisible(True,False) - 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 - scene.objects['Points-Twins-text']['Text'] = "Connection\nouverte :\n"+port+"\n à "+str(speed)+" baud" + scene.objects['Points-Twins-text']['Text'] = "Connection\nouverte :\n"+port+"\n"+str(speed)+" baud" print (twins_serial) else: scene.objects['Commands']['twins'] = False - scene.objects['Points-Twins-text']['Text'] = "Port pas \nprêt" + scene.objects['Points-Twins-text']['Text'] = "Port\n"+port+"\npas prêt" - # ser = serial.Serial('/dev/ttyACM0',38400) # 6 fps - # ser = serial.Serial('/dev/ttyACM0',9600) # 2 fps - #serial_port='COM5' # Windows - # serial_port='/dev/ttyACM0' # GNU/Linux - # 115200 -> 7 fps - # 38400 -> 6 fps - # 9600 -> 2 fps + # # ser = serial.Serial('/dev/ttyACM0',38400) # 6 fps + # # ser = serial.Serial('/dev/ttyACM0',9600) # 2 fps + # #serial_port='COM5' # Windows + # # serial_port='/dev/ttyACM0' # GNU/Linux + # # 115200 -> 7 fps + # # 38400 -> 6 fps + # # 9600 -> 2 fps def getSerialOrNone(port,speed): try: @@ -1147,44 +1146,48 @@ def rp_jumeau_close(): scene.objects['Points-Twins-text']['Text'] = "Connection\nfermée" # Configuration de la vitesse et des temps +# FIXME : Bug dans le transfert des données def rp_jumeau_config(speed, temps_avancer, temps_tourner): global twins_serial if scene.objects['Commands']['twins']: 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()) + serial_msg3 = str(temps_avancer)+"\n" + twins_serial.write(serial_msg3.encode()) rp_tempo (1) - serial_msg2 = str(temps_tourner)+"\n" - # print (serial_msg2) - twins_serial.write(serial_msg2.encode()) + serial_msg4 = str(temps_tourner)+"\n" + twins_serial.write(serial_msg4.encode()) rp_tempo (1) - serial_msg1 = "FC\n" - # print (serial_msg1) - twins_serial.write(serial_msg1.encode()) + serial_msg5 = "FC\n" + twins_serial.write(serial_msg5.encode()) def rp_serie_msg(text): global twins_serial - twins_serial.write(text.encode()) + text2= text+"\n" + twins_serial.write(text2.encode()) -def twins_listen(): +def twins_listen(cont): global twins_serial - print ("a") - serial_msg = str(twins_serial.readline()) - print (serial_msg) + if cont.sensors['Property'].positive: + if scene.objects['Commands']['twins_listen'] : + serial_msg = twins_serial.readline() + if serial_msg is not None: + scene.objects['Commands']['twins_readline'] = str(serial_msg) + scene.objects['Commands']['twins_listen'] = False def rp_serie_rcpt(): - pass - # global twins_serial - # print (twins_serial.readline()) - # return str(twins_serial.readline()) # Communication série : arduino|micro:bit -> modele 3d + scene.objects['Points-Twins-text']['Text'] = "Écoute de la \nconnection\n figeage de \n la scène" + scene.objects['Commands']['twins_readline'] = "" + scene.objects['Commands']['twins_listen'] = True + while scene.objects['Commands']['twins_readline'] == "": + if scene.objects['Commands']['twins_readline'] != "": + break + scene.objects['Points-Twins-text']['Text'] = "Connection\nouverte :\n"+scene.objects['Commands']['twins_port']+"\n"+str(scene.objects['Commands']['twins_speed'])+" baud" + return scene.objects['Commands']['twins_readline'] ############################################################################### # Fonction bas niveau diff --git a/twins/arduino_serialreader/arduino_serialreader.ino b/twins/arduino_serialreader/arduino_serialreader.ino old mode 100755 new mode 100644 index 1107fbf..19f8f62 --- a/twins/arduino_serialreader/arduino_serialreader.ino +++ b/twins/arduino_serialreader/arduino_serialreader.ino @@ -1,3 +1,5 @@ +#include "Wire.h" + /****************************************************************************** * arduino-serialreader.ino * @title: Lecteur du port serie d'une carte arduino @@ -11,12 +13,18 @@ /****************************************************************************** * Pupitre ******************************************************************************/ + + // Adressage Led Arduino +const int led_com = 13; // Led de communication modele 3d-> arduino (onboard) -// Adressage Led Arduino -/* const int led = 13; // Led de mouvement (onboard) */ -/* const int led_com = 10; // Led de communication modele 3d-> arduino */ -const int bt = 2; // Bouton -const int v = 3; // Voyant +// Adressage Entrees Arduino +const int bt = 4; // Bouton + +// Entrees numeriques (modele 3D) +bool bt_num=false; // Bouton numérique + +// Adressage Sorties Arduino +const int v = 2; // Voyant /****************************************************************************** * Communication serie @@ -33,11 +41,7 @@ void setup() { pinMode(bt, INPUT); // Bouton pinMode(v, OUTPUT); // Voyant - /* pinMode(led, OUTPUT); // Led de mouvement */ - /* pinMode(led_com, OUTPUT); // Led de communication modele 3d-> arduino */ digitalWrite(v, LOW); - /* digitalWrite(led, LOW); */ - /* digitalWrite(led_com, LOW); */ Serial.begin(115200); // Liaison série } @@ -51,13 +55,15 @@ void loop() { /***** * Communication : modele 3d -> arduino *****/ - + + // digitalWrite(v, HIGH); + if (serial_msg_complet) { if (serial_msg =="S\n") bt_num=true; // S pour Set if (serial_msg =="R\n") bt_num=false; // R pour Reset - Serial.println("Echo : "+serial_msg); + // Serial.println("Echo : "+serial_msg); serial_msg = ""; serial_msg_complet = false; } @@ -68,24 +74,32 @@ void loop() { * Bouton physique : LOW = actif et HIGH = pas actif *****/ - if digitalRead(bt) == LOW { - Serial.println("B"); - } + //Serial.println("Bouton"+ digitalRead(bt)); + if (digitalRead(bt)== LOW) { + Serial.println("Bouton actif"); + digitalWrite(v, HIGH); + delay(300); + } + else { + // Serial.println("Bouton repos"); + digitalWrite(v, LOW); + } + /***** - * Yoyant modele 3d-> arduino + * Voyant modele 3d-> arduino * * Bouton numérique (modele 3d) : true = actif et false = pas actif *****/ - if bt_num == true { - digitalWrite(v, HIGH); + if (bt_num) { + digitalWrite(v, HIGH); } - if bt_num == false { - digitalWrite(v, LOW); + else { + digitalWrite(v, LOW); } - /* delay(300); */ + //delay(300); } /****************************************************************************** @@ -98,6 +112,7 @@ void serialEvent() { serial_msg += inChar; if (inChar == '\n') { serial_msg_complet = true; + digitalWrite(v, HIGH); } } } diff --git a/twins/microbit_serialreader.py b/twins/microbit_serialreader.py index 88863e3..dc6638a 100644 --- a/twins/microbit_serialreader.py +++ b/twins/microbit_serialreader.py @@ -16,15 +16,14 @@ while True: # Envoi d'un message if button_a.is_pressed() : display.scroll("-> A") - uart.write("A") + uart.write("A\n") if button_b.is_pressed() : display.scroll("-> B") - uart.write("B") + uart.write("B\n") # pass # Réception d'un message - display.scroll('<- ') msg = uart.readline() display.scroll(msg[:-1]) # Affichage du message sans le '/n' - display.scroll(str(msg[0])+" "+str(msg[1])) # Affichage du message en code ASCII + # display.scroll(str(msg[0])+" "+str(msg[1])) # Affichage du message en code ASCII sleep(400) diff --git a/twins/rp_cmd-arduino.py b/twins/rp_cmd-arduino.py new file mode 100644 index 0000000..2579bc0 --- /dev/null +++ b/twins/rp_cmd-arduino.py @@ -0,0 +1,49 @@ +import bge # Bibliothèque Blender Game Engine (UPBGE) +import time +from rp_lib import * # Bibliothèque Ropy + +############################################################################### +# rp_cmd-arduino.py +# @title: Exemple pour le lecteur du port série Arduino +# @project: Ropy (Blender-EduTech) +############################################################################### + +############################################################################### +# Initialisation du niveau : +# Niveau 1 : Les premiers pas de Ropy +# Niveau 2 : Ma première fonction +# Niveau 3 : Sécuriser Ropy +# Niveau 4 : Partir au bout du monde +# Niveau 5 : Faire face à l'inconnu +# Niveau 6 : Se rendre utile +############################################################################### + +############################################################################### +# Fonctions +############################################################################### + +############################################################################### +# Commandes +############################################################################### + +def commandes(): + + rp_jumeau('/dev/ttyACM0', 115200) + + rp_serie_msg("S") # Allumer led + rp_tempo(2) + rp_serie_msg("R") # Etiendre led + + print (rp_serie_rcpt()) # Afficher message reçu + + rp_fin() # A garder + +############################################################################### +# En: Externals calls << DONT CHANGE THIS SECTION >> +# Fr: Appels externes << NE PAS MODIFIER CETTE SECTION >> +############################################################################### + +if __name__=='start': + thread_cmd_start(commandes) +if __name__=='stop': + thread_cmd_stop() diff --git a/twins/rp_cmd-microbit.py b/twins/rp_cmd-microbit.py new file mode 100644 index 0000000..b4bdaaa --- /dev/null +++ b/twins/rp_cmd-microbit.py @@ -0,0 +1,47 @@ +import bge # Bibliothèque Blender Game Engine (UPBGE) +import time +from rp_lib import * # Bibliothèque Ropy + +############################################################################### +# rp_cmd-microbit.py +# @title: Exemple pour le lecteur du port série Micro:bit +# @project: Ropy (Blender-EduTech) +############################################################################### + +############################################################################### +# Initialisation du niveau : +# Niveau 1 : Les premiers pas de Ropy +# Niveau 2 : Ma première fonction +# Niveau 3 : Sécuriser Ropy +# Niveau 4 : Partir au bout du monde +# Niveau 5 : Faire face à l'inconnu +# Niveau 6 : Se rendre utile +############################################################################### + +############################################################################### +# Fonctions +############################################################################### + +############################################################################### +# Commandes +############################################################################### + +def commandes(): + + rp_jumeau('/dev/ttyACM1', 115200) + + rp_serie_msg("Press a button !") # Envoyer un message + + print (rp_serie_rcpt()) # Réception d'un message (bouton appuyé) + + rp_fin() # A garder + +############################################################################### +# En: Externals calls << DONT CHANGE THIS SECTION >> +# Fr: Appels externes << NE PAS MODIFIER CETTE SECTION >> +############################################################################### + +if __name__=='start': + thread_cmd_start(commandes) +if __name__=='stop': + thread_cmd_stop() diff --git a/twins/rp_maqueen-robot.py b/twins/rp_maqueen-robot.py index 0d48716..945ff5a 100755 --- a/twins/rp_maqueen-robot.py +++ b/twins/rp_maqueen-robot.py @@ -58,18 +58,16 @@ while True: while True: conf=radio.receive() if conf=="FC": # Fin de la configuration - # display.show(attente_image) # Témoin de fonctionnement + display.scroll("Config : " +str(vitesse) + " - " +str(distance) + " - " +str(angle)) 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])) + # display.scroll(conf) # Affichage du message complet + if i == 1: # Configuration de la vitesse + vitesse = int(str(conf[2:-1])) + if i == 2: # Configuration de la distance + distance = int(str(conf[2:-1])) + if i == 3: # Configuration de l'angle + angle = int(str(conf[2:-1])) i+=1 # Avancer d'un pas