diff --git a/monte_charge/montchg-bak.py b/monte_charge/montchg-bak.py deleted file mode 100644 index a621362..0000000 --- a/monte_charge/montchg-bak.py +++ /dev/null @@ -1,453 +0,0 @@ -import bge # Bibliothèque Blender Game Engine (UPBGE) -import twin # Bibliothèque de l'environnement 3D des jumeaux numériques -import math -import time - -############################################################################### -# montchg.py -# @title: Commandes pour le monte-charge -# @project: Blender-EduTech -# @lang: fr -# @authors: Philippe Roy -# @copyright: Copyright (C) 2022 Philippe Roy -# @license: GNU GPL -############################################################################### - -# Récupérer la scène UPBGE -scene = bge.logic.getCurrentScene() - -# Couleurs -color_passive = (0.800, 0.005, 0.315,1) # bouton non activable : magenta -color_active = (0.799, 0.130, 0.063,1) # bouton activable : orange -color_hl = (0.8, 0.8, 0.8, 1) # bouton focus : blanc -color_activated = (0.8, 0.619, 0.021, 1) # bouton activé : jaune - -# Constantes UPBGE -JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED -JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED -ACTIVATE = bge.logic.KX_INPUT_ACTIVE -# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED - -############################################################################### -# Initialisation de la scène -############################################################################### - -def init(cont): - if cont.sensors['Init'].positive == False: # 1 seule fois - return False - - twin.manip_init() # Manipulation du modèle 3D - twin.cmd_init() # Commandes - - # Mémorisation de la position et orientation des composants du système au départ - # scene.objects['Cabine']['init_lx']=scene.objects['Portail'].worldPosition.x - # scene.objects['Portail']['init_ly']=scene.objects['Portail'].worldPosition.y - # scene.objects['Portail']['init_lz']=scene.objects['Portail'].worldPosition.z - # scene.objects['Engrenage']['init_rx']=scene.objects['Engrenage'].worldOrientation.to_euler().x - # scene.objects['Engrenage']['init_ry']=scene.objects['Engrenage'].worldOrientation.to_euler().y - # scene.objects['Engrenage']['init_rz']=scene.objects['Engrenage'].worldOrientation.to_euler().z - - system_init() # Initialisation du système - -############################################################################### -# Actionneurs -############################################################################### - -## -# Action du simulateur pour le clignotant -## - -# def sml_clignotant (cont): -# if scene.objects['System']['run']: -# obj = cont.owner -# if obj['actif'] and scene.objects['Led allumee'].visible == False: -# scene.objects['Led allumee'].setVisible(True,False) -# scene.objects['Led'].setVisible(False,False) -# # print ("Clignotant allumée") -# if obj['actif']==False and scene.objects['Led allumee'].visible == True: -# scene.objects['Led'].setVisible(True,False) -# scene.objects['Led allumee'].setVisible(False,False) -# # print ("Clignotant éteint") - -## -# Action du simulateur pour le moteur -## - -# def sml_moteur (cont): -# if scene.objects['System']['run']: -# obj = cont.owner -# pas_rot = math.pi/7 # z = 14 -# pas = 2.35619/0.3 # pas echelle 1:1 = 2.35619 -> pas à l'échelle de la maquette (0,3) : 2.35619/0.3 = 7,85396 -# vitesse = 0.05 -# engrenage_obj = scene.objects['Engrenage'] -# portail_obj = scene.objects['Portail'] -# if obj['actif_ouvrir']: -# # print (scene.objects['Portail'].worldPosition.x) -# engrenage_obj.applyRotation((0, 0, -pas_rot*vitesse), True) -# portail_obj.applyMovement((-pas*vitesse, 0, 0), True) -# # else: -# if obj['actif_fermer']: -# # print (scene.objects['Portail'].worldPosition.x) -# engrenage_obj.applyRotation((0, 0, pas_rot*vitesse), True) -# portail_obj.applyMovement((pas*vitesse, 0, 0), True) - -############################################################################### -# Capteurs fin de course -############################################################################### - -## -# Etat capteur fin de course portail ouvert -## - -# def sml_fdc_ouvert (cont): -# if scene.objects['System']['run'] : -# obj = cont.owner -# obj_etat=obj['actif'] -# obj_microrupteur=scene.objects['Microrupteur fdc ouvert'] -# # Etat capteur en fonction de la grille : worldPosition.x : 0 -> 65.5 et localPosition.x : 0 -> 218 -# if scene.objects['Portail'].localPosition.x <= 0 and obj['actif'] == False : -# obj['actif'] = True -# if scene.objects['Portail'].localPosition.x > 0 and obj_microrupteur['actif'] == False and obj['actif'] == True : -# obj['actif'] = False -# #Forçage -# if obj_microrupteur['actif'] == True: -# obj['actif'] = True -# #Couleurs -# if obj['actif'] == True and obj_microrupteur.color !=couleur_jaune: -# obj_microrupteur.color =couleur_jaune -# if obj['actif'] == False : -# if obj_microrupteur['MO'] == True and obj_microrupteur.color !=couleur_blanc: -# obj_microrupteur.color =couleur_blanc -# if obj_microrupteur['MO'] == False and obj_microrupteur.color !=couleur_orange: -# obj_microrupteur.color =couleur_orange - -## -# Etat capteur fin de course portail fermé -## - -# def sml_fdc_ferme (cont): -# if scene.objects['System']['run'] : -# obj = cont.owner -# obj_etat=obj['actif'] -# obj_microrupteur=scene.objects['Microrupteur fdc ferme'] -# # Etat capteur en fonction de la grille : worldPosition.x : 0 -> 65.5 et localPosition.x : 0 -> 218 -# if scene.objects['Portail'].localPosition.x >= 218 and obj['actif'] == False : -# obj['actif'] = True -# if scene.objects['Portail'].localPosition.x < 218 and obj_microrupteur['actif'] == False and obj['actif'] == True : -# obj['actif'] = False -# #Forçage -# if obj_microrupteur['actif'] == True: -# obj['actif'] = True -# #Couleurs -# if obj['actif'] == True and obj_microrupteur.color !=couleur_jaune: -# obj_microrupteur.color =couleur_jaune -# if obj['actif'] == False : -# if obj_microrupteur['MO'] == True and obj_microrupteur.color !=couleur_blanc: -# obj_microrupteur.color =couleur_blanc -# if obj_microrupteur['MO'] == False and obj_microrupteur.color !=couleur_orange: -# obj_microrupteur.color =couleur_orange - -# ## -# # Forçage capteur fin de course avec la souris -# ## - -# def sml_microrupteur (cont): -# if scene.objects['System']['run'] : -# system_click(cont, cont.owner) - -# ############################################################################### -# # Capteur barrage -# ############################################################################### - -# ## -# # Emetteur IR -# ## - -# def sml_emet_ir (cont): -# if scene.objects['System']['run'] : -# obj = cont.owner -# obj_emetteur_ir=scene.objects['Emetteur IR'] -# obj_recepteur_ir=scene.objects['Recepteur IR'] -# if obj['actif'] and scene.objects['Emetteur IR Led allumee'].visible == False: -# scene.objects['Emetteur IR Led allumee'].setVisible(True,False) -# scene.objects['Emetteur IR Led'].setVisible(False,False) -# obj_emetteur_ir.color = couleur_orange -# obj_recepteur_ir.color = couleur_orange -# if obj['actif']==False and scene.objects['Emetteur IR Led allumee'].visible == True: -# scene.objects['Emetteur IR Led'].setVisible(True,False) -# scene.objects['Emetteur IR Led allumee'].setVisible(False,False) -# obj_emetteur_ir.color = couleur_magenta -# obj_recepteur_ir.color = couleur_magenta - -# ## -# # Récepteur IR -# ## - -# def sml_recep_ir (cont): -# if scene.objects['System']['run'] and scene.objects['Module emetteur IR']['actif'] : -# obj = cont.owner -# system_click(cont, scene.objects['Module recepteur IR']) -# if scene.objects['Module recepteur IR']['actif']==True : -# scene.objects['Emetteur IR'].color = couleur_jaune -# scene.objects['Recepteur IR'].color = couleur_jaune - -# ############################################################################### -# # Boutons poussoirs -# ############################################################################### - -# ## -# # Bouton pousssoir coté rue -# ## - -# def sml_bp_rue (cont): -# if scene.objects['System']['run'] : -# system_click(cont, scene.objects['Module bouton cote rue']) - -# ## -# # Bouton pousssoir coté cour -# ## - -# def sml_bp_cour (cont): -# if scene.objects['System']['run'] : -# system_click(cont, scene.objects['Module bouton cote cour']) - -############################################################################### -# Système -############################################################################### - -## -# Initialisation du système -# # Le moteur est géré en continue. -## - -def system_init (): - system_reset() - -## -# Réinitialisation du système -## - -def system_reset (): - - # Voyants aux états initiaux - scene.objects['Led niveau 0'].setVisible(True,False) - scene.objects['Led niveau 0-on'].setVisible(False,False) - scene.objects['Led niveau 1'].setVisible(True,False) - scene.objects['Led niveau 1-on'].setVisible(False,False) - - # Cabine - # # applyRotationTo(scene.objects['System'], 0, 0, 0) - # scene.objects['Portail'].worldPosition.x = scene.objects['Portail']['init_lx'] - # scene.objects['Portail'].worldPosition.y = scene.objects['Portail']['init_ly'] - # scene.objects['Portail'].worldPosition.z = scene.objects['Portail']['init_lz'] - - # # Moteur à l'état initial - # rres=0.001 # resolution rotation - # obj1=scene.objects['Engrenage'] - # while (obj1.localOrientation.to_euler().y) > 1.1*rres : - # obj1.applyRotation((0, 0, -rres), True) - # while (obj1.localOrientation.to_euler().y) < -1.1*rres : - # obj1.applyRotation((0, 0, rres), True) - - # I/O à l'état initial - scene.objects['Led niveau 0']['activated']=False - scene.objects['Led niveau 1']['activated']=False - scene.objects['Bp niveau 0']['activated']=False - scene.objects['Bp niveau 1']['activated']=False - scene.objects['Microrupteur niveau 0']['activated']=False - scene.objects['Microrupteur niveau 1']['activated']=False - -## -# Boucle principale -## - -def system_run (): - - # # Lecture de la liaison série : programme Arduino : berceau_arduino.ino - # serial_msg = str(serial_comm.readline()) # Communication série : arduino -> modele 3d - - # # Affiche le message uniquement - # if serial_msg.find("Print")>0 or serial_msg.find("Debug")>0 or serial_msg.find("Echo")>0: - # print ("Communication port série : ", serial_msg) - # serial_msg="" - # return - - # Position cabine numérique - print ("serial_msg : ", serial_msg) - roll_txt = txt_extrac(serial_msg,"Roll (Rx): ", " Pitch") - # pitch_txt= txt_extrac(serial_msg,"Pitch (Ry): ", " \\r\\n") - pitch_txt = txt_extrac(serial_msg,"Pitch (Ry): ", " bt_a_m:") - if roll_txt !="" and pitch_txt !="" : - obj1=scene.objects['Plateau'] - roll=float(roll_txt)/57.3 - pitch=float(pitch_txt)/57.3 - # print ("Roll : ", roll, " Pitch : ", pitch) - applyRotationTo(scene.objects['Plateau'], roll,0, 0) - applyRotationTo(scene.objects['Plateau'], roll,pitch, 0) - scene.objects['Plateau']['roll']=roll - scene.objects['Plateau']['pitch']=pitch - - # Capteurs numériques - - - # Modele 3d -> Arduino : FIXME - # Arduino -> Modele 3d : FIXME - - # Arduino -> numérique - # bt_a_m_txt = txt_extrac_bool(serial_msg,"bt_a_m: ") - # bt_a_d_txt = txt_extrac_bool(serial_msg,"bt_a_d: ") - # bt_b_m_txt = txt_extrac_bool(serial_msg,"bt_b_m: ") - # bt_b_d_txt = txt_extrac_bool(serial_msg,"bt_b_d: ") - # bt_c_m_txt = txt_extrac_bool(serial_msg,"bt_c_m: ") - # bt_c_d_txt = txt_extrac_bool(serial_msg,"bt_c_d: ") - # bp_phy('Bp Am', bt_a_m_txt) - # bp_phy('Bp Ad', bt_a_d_txt) - # bp_phy('Bp Bm', bt_b_m_txt) - # bp_phy('Bp Bd', bt_b_d_txt) - # bp_phy('Bp Cm', bt_c_m_txt) - # bp_phy('Bp Cd', bt_c_d_txt) - - # # Voyants aux états initiaux - # scene.objects['Led niveau 0'].setVisible(True,False) - # scene.objects['Led niveau 0-on'].setVisible(False,False) - # scene.objects['Led niveau 1'].setVisible(True,False) - # scene.objects['Led niveau 1-on'].setVisible(False,False) - - # Cabine - # # applyRotationTo(scene.objects['System'], 0, 0, 0) - # scene.objects['Portail'].worldPosition.x = scene.objects['Portail']['init_lx'] - # scene.objects['Portail'].worldPosition.y = scene.objects['Portail']['init_ly'] - # scene.objects['Portail'].worldPosition.z = scene.objects['Portail']['init_lz'] - - # # Moteur à l'état initial - # rres=0.001 # resolution rotation - # obj1=scene.objects['Engrenage'] - # while (obj1.localOrientation.to_euler().y) > 1.1*rres : - # obj1.applyRotation((0, 0, -rres), True) - # while (obj1.localOrientation.to_euler().y) < -1.1*rres : - # obj1.applyRotation((0, 0, rres), True) - - # I/O à l'état initial - # scene.objects['Led niveau 0']['activated']=False - # scene.objects['Led niveau 1']['activated']=False - # scene.objects['Bp niveau 0']['activated']=False - # scene.objects['Bp niveau 1']['activated']=False - # scene.objects['Microrupteur niveau 0']['activated']=False - # scene.objects['Microrupteur niveau 1']['activated']=False - -############################################################################### -# Interface -############################################################################### - -## -# Highlight sur les éléments cliquables du systèmes -## - -def hl(cont): - obj = cont.owner - name=obj.name - - # Activation - if cont.sensors['MO'].status == JUST_ACTIVATED and scene.objects['System']['run']: - scene.objects[name].color = color_hl - - # Désactivation - if cont.sensors['MO'].status == JUST_RELEASED: - scene.objects[name].color = color_active - -## -# Click sur les éléments cliquables du systèmes (activation numérique) -## - -def click(cont): - obj = cont.owner - name=obj.name - - # Activation - if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['System']['manip_mode']==0: - scene.objects[name].color = color_activated - obj['activated'] = True - # Modele 3d -> Arduino : FIXME - - # Désactivation - if cont.sensors['Click'].status == JUST_RELEASED: - obj['activated'] = False - # Modele 3d -> Arduino : FIXME - if cont.sensors['MO'].positive: - scene.objects[name].color = color_hl - else: - scene.objects[name].color = color_active - -## -# Activation réel -## - -# FIXME - - # obj = cont.owner - # if cont.sensors['MO'].status == JUST_ACTIVATED : - # obj.color = couleur_blanc - # obj['MO']=True - # if cont.sensors['Click'].status == JUST_ACTIVATED and scene.objects['System']['manip_mode']==0: - # if obj['MO']: - # obj_activation['actif'] = True - # obj.color = couleur_jaune - # if cont.sensors['MO'].status == JUST_RELEASED : - # obj['MO']=False - # if cont.sensors['Click'].status == ACTIVATE : - # obj.color = couleur_jaune - # else: - # obj.color = couleur_orange - # if cont.sensors['Click'].status == JUST_RELEASED: - # obj_activation['actif'] = False - # obj.color = couleur_blanc - # if cont.sensors['MO'].status != ACTIVATE : - # obj.color = couleur_orange - -# ############################################################################### -# # Boutons poussoirs -# ############################################################################### - -# # Activation numérique des boutons -# def bp_num(cont): -# if scene.objects['Systeme']['run'] : -# obj = cont.owner -# # print(obj.name, "obj.name") -# if cont.sensors['MO'].status == JUST_ACTIVATED : -# obj.color = couleur_blanc -# obj['MO']=True -# if cont.sensors['Click'].status == JUST_ACTIVATED and scene.objects['Systeme']['manip_mode']==0: -# if obj['MO']: -# obj['actif_num'] = True -# # print(obj.name, "activé") -# obj.color = couleur_jaune -# serial_msg = obj.name+"\n" -# serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> arduino -# if cont.sensors['MO'].status == JUST_RELEASED : -# if obj['MO']: -# obj['MO']=False -# if cont.sensors['Click'].status == ACTIVATE : -# obj.color = couleur_jaune -# else: -# obj.color = couleur_orange -# if cont.sensors['Click'].status == JUST_RELEASED: -# if obj['actif_num']: -# obj['actif_num'] = False -# # print(obj.name, "desactivé") -# obj.color = couleur_blanc -# serial_msg = obj.name+" R\n" -# # serial_msg = "RELEASED"+"\n" -# serial_comm.write(serial_msg.encode()) # Communication série : modele 3d -> arduino -# if cont.sensors['MO'].status != ACTIVATE : -# obj.color = couleur_orange - -# # Affichage de l'activation physique des boutons -# def bp_phy(obj_name, bp_phy_sig): -# obj=scene.objects[obj_name] -# if bp_phy_sig =="0": -# obj['actif_phy'] = True -# obj.color = couleur_jaune -# else: -# if obj['actif_phy']: -# obj['actif_phy'] = False -# obj.color = couleur_orange diff --git a/monte_charge/montchg_lib-bak.py b/monte_charge/montchg_lib-bak.py deleted file mode 100644 index 616597d..0000000 --- a/monte_charge/montchg_lib-bak.py +++ /dev/null @@ -1,412 +0,0 @@ -import bge # Bibliothèque Blender Game Engine (UPBGE) -import threading # Multithreading -import trace -import sys -import time - -import serial # Liaison série -import pyfirmata # Protocole Firmata -from serial.tools.list_ports import comports # Détection du port automatique - -############################################################################### -# montchg_lib.py -# @title: Bibliothèque utilisateur du monte-charge -# @project: Blender-EduTech -# @lang: fr -# @authors: Philippe Roy -# @copyright: Copyright (C) 2022 Philippe Roy -# @license: GNU GPL -############################################################################### - -scene = bge.logic.getCurrentScene() - -# Threads -threads_cmd=[] -debug_thread = scene.objects['System']['debug_thread'] - -# Carte du jumeau numérique -board = None -board_it = None # Iterator (input) - -# Brochage du jumeau numérique -bp_int_pin = None -bp_ext_pin = None -fdc_o_pin = None -fdc_f_pin = None -ir_emett_pin = None -ir_recept_pin = None -mot_o_pin = None -mot_f_pin = None -gyr_pin = None - -# UPBGE constants -JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED -JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED -ACTIVATE = bge.logic.KX_INPUT_ACTIVE -# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED - -############################################################################### -# Méthode kill pour les tâches (threads) -############################################################################### - -class thread_with_trace(threading.Thread): - def __init__(self, *args, **keywords): - threading.Thread.__init__(self, *args, **keywords) - self.killed = False - - def start(self): - self.__run_backup = self.run - self.run = self.__run - threading.Thread.start(self) - - def __run(self): - sys.settrace(self.globaltrace) - self.__run_backup() - self.run = self.__run_backup - - def globaltrace(self, frame, event, arg): - if event == 'call': - return self.localtrace - else: - return None - - def localtrace(self, frame, event, arg): - if self.killed: - if event == 'line': - raise SystemExit() - return self.localtrace - - def kill(self): - self.killed = True - -############################################################################### -# Start et stop des tâches (threads) -############################################################################### - -def thread_start(threads, type_txt, fct): - threads.append(thread_with_trace(target = fct)) - threads[len(threads)-1].start() - if (debug_thread): - print ("Thread",type_txt, "#", len(threads)-1, "open.") - -def thread_stop(threads, type_txt): - i=0 - zombie_flag=False - for t in threads: - if not t.is_alive(): - if (debug_thread): - print ("Thread",type_txt, "#",i,"closed.") - else: - if (debug_thread): - print ("Thread",type_txt, "#",i,"still open ...") - t.kill() - t.join() - if not t.is_alive(): - if (debug_thread): - print ("Thread",type_txt, "#",i,"killed.") - else: - if (debug_thread): - print ("Thread",type_txt, "#",i,"zombie...") - zombie_flag=True - i +=1 - if zombie_flag==False: - if (debug_thread): - print ("All threads",type_txt, "are closed.") - scene.objects['System']['thread_cmd']=False - return True - else: - if (debug_thread): - print ("There are zombies threads",type_txt, ".") - return False - -def thread_cmd_start(fct): - thread_start(threads_cmd, "commands", fct) - -def thread_cmd_stop(): - thread_stop(threads_cmd, "commands") - -def end(): - - # Jumeau numérique - if scene.objects['System']['twins']: - # serial_msg = "FI\n" - # twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) - jumeau_close() - - # Thread - if (debug_thread): - print ("Thread commands is arrived.") - time.sleep(0.125) - scene.objects['System']['thread_cmd']=False - time.sleep(0.125) - -def fin(): - end() - -def quit(): - end() - -############################################################################### -# Actionneurs -############################################################################### - -# Ordre pour le voyant 0 -def voy_0 (order): - scene.objects['Led niveau 0']['activated']=order - if order: - scene.objects['Led niveau 0-on'].setVisible(True,False) - scene.objects['Led niveau 0'].setVisible(False,False) - else: - scene.objects['Led niveau 0'].setVisible(True,False) - scene.objects['Led niveau 0-on'].setVisible(False,False) - # global gyr_pin - # if scene.objects['System']['twins'] : - # if ordre : - # gyr_pin.write(1) - # else: - # gyr_pin.write(0) - -# Ordre pour le voyant 1 -def voy_1 (order): - scene.objects['Led niveau 1']['activated']=order - if order: - scene.objects['Led niveau 1-on'].setVisible(True,False) - scene.objects['Led niveau 1'].setVisible(False,False) - else: - scene.objects['Led niveau 1'].setVisible(True,False) - scene.objects['Led niveau 1-on'].setVisible(False,False) - -# Ordre pour le moteur phase monter -def mot_m (order): - scene.objects['Led niveau 1']['up']=order - -# Ordre pour le moteur phase descendre -def mot_d (order): - scene.objects['Ensemble moteur']['down']=ordre - -############################################################################### -# Capteurs -############################################################################### - -# Compte-rendu du capteur de présence cabine niveau 0 -def pc_0 (): - return scene.objects['Microrupteur niveau 0']['activated'] - -# Compte-rendu du capteur de présence cabine niveau 0 -def pc_1 (): - return scene.objects['Microrupteur niveau 1']['activated'] - -############################################################################### -# Boutons poussoirs -############################################################################### - -# Compte-rendu du bouton pousssoir appel niveau 0 -def ba_0 (): - return scene.objects['Bp niveau 0']['activated'] - -# Compte-rendu du bouton pousssoir appel niveau 1 -def ba_1 (): - return scene.objects['Bp niveau 1']['activated'] - -############################################################################### -# Temporisation -############################################################################### - -def tempo (duree): - time.sleep(duree) - -############################################################################### -# Jumeau numérique -############################################################################### - -## -# Recherche automatique du port -## - -def serial_autoget_port(): - # USB Vendor ID, USB Product ID - board_dict={'microbit' :[3368, 516], - 'uno' :[9025, 67], - 'mega' :[9025, 66]} - for com in comports(): # Arduino Uno - if com.vid == board_dict["uno"][0] and com.pid == board_dict["uno"][1]: - return [com.device,"Arduino Uno"] - for com in comports(): # Arduino Mega - if com.vid == board_dict["mega"][0] and com.pid == board_dict["mega"][1]: - return [com.device,"Arduino Mega"] - return [None,""] - -## -# Création de l'objet carte (protocole Firmata) -## - -def board_init(port): - try: - return pyfirmata.Arduino(port) - except: - return None - -## -# Création de l'objet serial (communication série) -## - -def serial_init(port,speed): - try: - return serial.Serial(port,speed) - except: - return None - -## -# Affiche la liste des cartes (communication série) -## - -def serial_devices(): - for com in comports(): - print ("Name : "+str(com.name)+"\n" - +" Device : "+str(com.device)+"\n" - +" Hardware ID : "+str(com.hwid)+"\n" - +" USB Vendor ID : "+str(com.vid)+"\n" - +" USB Product ID : "+str(com.pid)+"\n" - +" USB device location : "+str(com.location)+"\n" - +" USB manufacturer : "+str(com.manufacturer)+"\n" - +" USB product : "+str(com.product)+"\n" - +" Interface-specific : "+str(com.interface)) - -## -# Activation de la communication avec la carte de communication (Arduino, Micro:bit) -# Vitesse : 115200 -> 7 fps, 38400 -> 6 fps, 9600 -> 2 fps -# pyserial : baudrate=115200 -# pyfirmata : baudrate=57600 -## - -def jumeau(pins): - global board - # global gyr_pin - - # UI : étape 1 - scene.objects['Twins-text']['Text'] = "Connection en cours ..." - - # Mise en place de la carte - speed = 57600 - [device,board_name] =serial_autoget_port() # Recherche automatique du port - if device is None: - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Aucune connection disponible : jumeau réel débranché." - return False - board = board_init(device) - if board is None: - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Aucune connection disponible : port "+device+" pas prêt." - return False - scene.objects['System']['twins'] = True - # scene.objects['System']['twins_close'] = False - scene.objects['System']['twins_port'] = device - scene.objects['System']['twins_speed'] = speed - # scene.objects['System']['twins_readline'] = "" - board_it = pyfirmata.util.Iterator(board) # Itérateur pour les entrées - board_it.start() - - # UI : étape 2 - if board =="": - scene.objects['Twins-text']['Text'] = "Connection ouverte : "+device+" - "+str(speed)+" baud." - else: - scene.objects['Twins-text']['Text'] = "Connection ouverte : "+board_name+" sur "+device+" à "+str(speed)+" baud." - tempo (0.1) - - # Déclaration des entrées - sorties - # for pin in pins: - # print (pin) - # if - # bp_ext_pin = board_io('d:'+str(es_dict['bp_ext'])+':i') # Bouton poussoir coté rue - # bp_int_pin = board_io('d:'+str(es_dict['bp_int'])+':i') # Bouton poussoir coté cour - # fdc_o_pin = board_io('d:'+str(es_dict['fdc_o'])+':i') # Capteur fin de course portail ouvert - # fdc_f_pin = board_io('d:'+str(es_dict['fdc_f'])+':i') # Capteur fin de course portail fermé - # ir_recept_pin = board_io('d:'+str(es_dict['ir_recept'])+':i') # Recepteur pour le capteur barrage IR - - # gyr_pin = board_io('d:'+str(es_dict['gyr'])+':o') # Gyrophare - # mot_o_pin = board_io('d:'+str(es_dict['mot_o'])+':o') # Ouvrir le portail (moteur sens trigo) - # mot_f_pin = board_io('d:'+str(es_dict['mot_f'])+':o') # Fermer le portail (moteur sens horaire - # ir_emett_pin = board_io('d:'+str(es_dict['ir_emett'])+':o') # Emetteur pour le capteur barrage IR - return True - -# def board_io(da,pin,io): -# if pin_def is not None: -# return board.get_pin(da+':'+pin_def) -# else: -# print ("Définition entrée-sortie non trouvée : "+pin_def) - -## -# Fermeture de la communication série -## - -def jumeau_close(): - global board - # twins_serial.close() # Fermer proprement le port série - board.exit() # Fermer proprement la communication avec la carte - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Connection fermée." - -# Configuration du port -# FIXME -def jumeau_config(port, speed): - pass - # global board - # global twins_serial - # if scene.objects['System']['twins']: - # serial_msg1 = "CF\n" - # twins_serial.write(serial_msg1.encode()) - # tempo (1) - # serial_msg2 = str(speed)+"\n" - # twins_serial.write(serial_msg2.encode()) - # tempo (1) - # serial_msg3 = str(temps_avancer)+"\n" - # twins_serial.write(serial_msg3.encode()) - # tempo (1) - # serial_msg4 = str(temps_tourner)+"\n" - # twins_serial.write(serial_msg4.encode()) - # tempo (1) - # serial_msg5 = "FC\n" - # twins_serial.write(serial_msg5.encode()) - -## -# Envoi d'un message vers la communication série -## - -# def serie_msg(text): -# global twins_serial -# text2= text+"\n" -# scene.objects['Twins-text']['Text'] = "Communication : envoi message : "+text -# twins_serial.write(text2.encode()) - -## -# Mise en écoute de jumeau numérique (figeage de la scène) -## - -# def twins_listen(cont): -# global twins_serial -# if scene.objects['System']['twins']: -# if scene.objects['System']['twins_readline'] != "": -# scene.objects['Twins-text']['Text'] = "Écoute de la connection figeage de la scène.... Message reçu : "+scene.objects['System']['twins_readline'] -# else: -# scene.objects['Twins-text']['Text'] = "Écoute de la connection figeage de la scène..." -# if cont.sensors['Property'].positive: -# if scene.objects['System']['twins_listen'] : -# serial_msg = twins_serial.readline() -# if serial_msg is not None: -# scene.objects['System']['twins_readline'] = str(serial_msg) -# # scene.objects['Twins-text']['Text'] = "Message reçu : "+str(serial_msg) -# scene.objects['System']['twins_listen'] = False - -## -# Réception d'un message de la communication série -## - -# def serie_rcpt(): -# # scene.objects['Twins-text']['Text'] = "Écoute de la \nconnection\n figeage de \n la scène" -# scene.objects['System']['twins_readline'] = "" -# scene.objects['System']['twins_listen'] = True -# while scene.objects['System']['twins_readline'] == "": -# if scene.objects['System']['twins_readline'] != "": -# break -# # scene.objects['Twins-text']['Text'] = "Connection\nouverte :\n"+scene.objects['System']['twins_port']+"\n"+str(scene.objects['System']['twins_speed'])+" baud" -# return scene.objects['System']['twins_readline'] diff --git a/monte_charge/monte_charge-1.blend b/monte_charge/monte_charge-1.blend deleted file mode 100644 index f75d811..0000000 Binary files a/monte_charge/monte_charge-1.blend and /dev/null differ diff --git a/monte_charge/monte_charge-2.blend b/monte_charge/monte_charge-2.blend deleted file mode 100644 index ed461fc..0000000 Binary files a/monte_charge/monte_charge-2.blend and /dev/null differ diff --git a/portail_coulissant/README.md b/portail_coulissant/README.md index 99ff397..95cc4ec 100644 --- a/portail_coulissant/README.md +++ b/portail_coulissant/README.md @@ -15,7 +15,7 @@ Le script Python qui permet la commande du portail est le fichier **'porcou_cmd. #### Actions Les actions (ordre = True ou False) sont : -- Gyrophare : **gyr (True|False)** +- Gyrophare : **gyr(True | False)** - Ouvrir le portail (moteur sens trigo) : **mot_o (True | False)** - Fermer le portail (moteur sens horaire) : **mot_f (True | False)** - Emetteur pour le capteur barrage IR : **ir_emet(True | False)** diff --git a/portail_coulissant/porcou-bak.py b/portail_coulissant/porcou-bak.py deleted file mode 100644 index 98d759a..0000000 --- a/portail_coulissant/porcou-bak.py +++ /dev/null @@ -1,301 +0,0 @@ -import bge # Bibliothèque Blender Game Engine (UPBGE) -import twin # Bibliothèque de l'environnement 3D des jumeaux numériques -import math -import time - -############################################################################### -# porcou.py -# @title: Commandes pour le portail coulissant -# @project: Blender-EduTech -# @lang: fr -# @authors: Philippe Roy -# @copyright: Copyright (C) 2020-2022 Philippe Roy -# @license: GNU GPL -############################################################################### - -# Récupérer la scène UPBGE -scene = bge.logic.getCurrentScene() - -# Couleurs -couleur_magenta = (0.800, 0.005, 0.315,1) # bouton non activable : magenta -couleur_orange = (0.799, 0.130, 0.063,1) # bouton activable : orange -couleur_blanc = (0.8, 0.8, 0.8, 1) # bouton focus : blanc -couleur_jaune = (0.8, 0.619, 0.021, 1) # bouton activé : jaune - -# Constantes UPBGE -JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED -JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED -ACTIVATE = bge.logic.KX_INPUT_ACTIVE -# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED - -############################################################################### -# Initialisation de la scène -############################################################################### - -def init(cont): - if cont.sensors['Init'].positive == False: # 1 seule fois - return False - - twin.manip_init() # Manipulation du modèle 3D - twin.cmd_init() # Commandes - - # Mémorisation de la position et orientation des composants du système - scene.objects['Portail']['init_lx']=scene.objects['Portail'].worldPosition.x - scene.objects['Portail']['init_ly']=scene.objects['Portail'].worldPosition.y - scene.objects['Portail']['init_lz']=scene.objects['Portail'].worldPosition.z - scene.objects['Engrenage']['init_rx']=scene.objects['Engrenage'].worldOrientation.to_euler().x - scene.objects['Engrenage']['init_ry']=scene.objects['Engrenage'].worldOrientation.to_euler().y - scene.objects['Engrenage']['init_rz']=scene.objects['Engrenage'].worldOrientation.to_euler().z - - system_init() # Initialisation du système - -############################################################################### -# Actionneurs -############################################################################### - -## -# Action du simulateur pour le clignotant -## - -def sml_clignotant (cont): - if scene.objects['System']['run']: - obj = cont.owner - if obj['actif'] and scene.objects['Led allumee'].visible == False: - scene.objects['Led allumee'].setVisible(True,False) - scene.objects['Led'].setVisible(False,False) - # print ("Clignotant allumée") - if obj['actif']==False and scene.objects['Led allumee'].visible == True: - scene.objects['Led'].setVisible(True,False) - scene.objects['Led allumee'].setVisible(False,False) - # print ("Clignotant éteint") - -## -# Action du simulateur pour le moteur -## - -def sml_moteur (cont): - if scene.objects['System']['run']: - obj = cont.owner - pas_rot = math.pi/7 # z = 14 - pas = 2.35619/0.3 # pas echelle 1:1 = 2.35619 -> pas à l'échelle de la maquette (0,3) : 2.35619/0.3 = 7,85396 - vitesse = 0.05 - engrenage_obj = scene.objects['Engrenage'] - portail_obj = scene.objects['Portail'] - if obj['actif_ouvrir']: - # print (scene.objects['Portail'].worldPosition.x) - engrenage_obj.applyRotation((0, 0, -pas_rot*vitesse), True) - portail_obj.applyMovement((-pas*vitesse, 0, 0), True) - # else: - if obj['actif_fermer']: - # print (scene.objects['Portail'].worldPosition.x) - engrenage_obj.applyRotation((0, 0, pas_rot*vitesse), True) - portail_obj.applyMovement((pas*vitesse, 0, 0), True) - -############################################################################### -# Capteurs fin de course -############################################################################### - -## -# Etat capteur fin de course portail ouvert -## - -def sml_fdc_ouvert (cont): - if scene.objects['System']['run'] : - obj = cont.owner - obj_etat=obj['actif'] - obj_microrupteur=scene.objects['Microrupteur fdc ouvert'] - # Etat capteur en fonction de la grille : worldPosition.x : 0 -> 65.5 et localPosition.x : 0 -> 218 - if scene.objects['Portail'].localPosition.x <= 0 and obj['actif'] == False : - obj['actif'] = True - if scene.objects['Portail'].localPosition.x > 0 and obj_microrupteur['actif'] == False and obj['actif'] == True : - obj['actif'] = False - # Forçage - if obj_microrupteur['actif'] == True: - obj['actif'] = True - # Couleurs - if obj['actif'] == True and obj_microrupteur.color !=couleur_jaune: - obj_microrupteur.color =couleur_jaune - if obj['actif'] == False : - if obj_microrupteur['MO'] == True and obj_microrupteur.color !=couleur_blanc: - obj_microrupteur.color =couleur_blanc - if obj_microrupteur['MO'] == False and obj_microrupteur.color !=couleur_orange: - obj_microrupteur.color =couleur_orange - -## -# Etat capteur fin de course portail fermé -## - -def sml_fdc_ferme (cont): - if scene.objects['System']['run'] : - obj = cont.owner - obj_etat=obj['actif'] - obj_microrupteur=scene.objects['Microrupteur fdc ferme'] - # Etat capteur en fonction de la grille : worldPosition.x : 0 -> 65.5 et localPosition.x : 0 -> 218 - if scene.objects['Portail'].localPosition.x >= 218 and obj['actif'] == False : - obj['actif'] = True - if scene.objects['Portail'].localPosition.x < 218 and obj_microrupteur['actif'] == False and obj['actif'] == True : - obj['actif'] = False - #Forçage - if obj_microrupteur['actif'] == True: - obj['actif'] = True - #Couleurs - if obj['actif'] == True and obj_microrupteur.color !=couleur_jaune: - obj_microrupteur.color =couleur_jaune - if obj['actif'] == False : - if obj_microrupteur['MO'] == True and obj_microrupteur.color !=couleur_blanc: - obj_microrupteur.color =couleur_blanc - if obj_microrupteur['MO'] == False and obj_microrupteur.color !=couleur_orange: - obj_microrupteur.color =couleur_orange - -## -# Forçage capteur fin de course avec la souris -## - -def sml_microrupteur (cont): - if scene.objects['System']['run'] : - system_click(cont, cont.owner) - -############################################################################### -# Capteur barrage -############################################################################### - -## -# Emetteur IR -## - -def sml_emet_ir (cont): - if scene.objects['System']['run'] : - obj = cont.owner - obj_emetteur_ir=scene.objects['Emetteur IR'] - obj_recepteur_ir=scene.objects['Recepteur IR'] - if obj['actif'] and scene.objects['Emetteur IR Led allumee'].visible == False: - scene.objects['Emetteur IR Led allumee'].setVisible(True,False) - scene.objects['Emetteur IR Led'].setVisible(False,False) - obj_emetteur_ir.color = couleur_orange - obj_recepteur_ir.color = couleur_orange - if obj['actif']==False and scene.objects['Emetteur IR Led allumee'].visible == True: - scene.objects['Emetteur IR Led'].setVisible(True,False) - scene.objects['Emetteur IR Led allumee'].setVisible(False,False) - obj_emetteur_ir.color = couleur_magenta - obj_recepteur_ir.color = couleur_magenta - -## -# Récepteur IR -## - -def sml_recep_ir (cont): - if scene.objects['System']['run'] and scene.objects['Module emetteur IR']['actif'] : - obj = cont.owner - system_click(cont, scene.objects['Module recepteur IR']) - if scene.objects['Module recepteur IR']['actif']==True : - scene.objects['Emetteur IR'].color = couleur_jaune - scene.objects['Recepteur IR'].color = couleur_jaune - -############################################################################### -# Boutons poussoirs -############################################################################### - -## -# Bouton pousssoir coté rue -## - -def sml_bp_rue (cont): - if scene.objects['System']['run'] : - system_click(cont, scene.objects['Module bouton cote rue']) - -## -# Bouton pousssoir coté cour -## - -def sml_bp_cour (cont): - if scene.objects['System']['run'] : - system_click(cont, scene.objects['Module bouton cote cour']) - -############################################################################### -# Système -############################################################################### - -## -# Initialisation du système -# Le moteur est géré en continue. -## - -def system_init (): - - # Clignotant - scene.objects['Module led']['actif']=False - scene.objects['Led allumee'].setVisible(False,False) - scene.objects['Led'].setVisible(True,False) - - # Emetteur IR - scene.objects['Module emetteur IR']['actif']=False - scene.objects['Emetteur IR Led allumee'].setVisible(False,False) - scene.objects['Emetteur IR Led'].setVisible(True,False) - scene.objects['Emetteur IR'].color = couleur_magenta - scene.objects['Recepteur IR'].color = couleur_magenta - -## -# Réinitialisation du système -## - -def system_reset (): - - # Grille à l'état initial - # applyRotationTo(scene.objects['System'], 0, 0, 0) - scene.objects['Portail'].worldPosition.x = scene.objects['Portail']['init_lx'] - scene.objects['Portail'].worldPosition.y = scene.objects['Portail']['init_ly'] - scene.objects['Portail'].worldPosition.z = scene.objects['Portail']['init_lz'] - - # Moteur à l'état initial - rres=0.001 # resolution rotation - obj1=scene.objects['Engrenage'] - while (obj1.localOrientation.to_euler().y) > 1.1*rres : - obj1.applyRotation((0, 0, -rres), True) - while (obj1.localOrientation.to_euler().y) < -1.1*rres : - obj1.applyRotation((0, 0, rres), True) - - # Led à l'état initial - scene.objects['Led'].setVisible(True,False) - scene.objects['Led allumee'].setVisible(False,False) - - # Capteur barrage IR - scene.objects['Emetteur IR Led'].setVisible(True,False) - scene.objects['Emetteur IR Led allumee'].setVisible(False,False) - scene.objects['Emetteur IR'].color = couleur_magenta - scene.objects['Recepteur IR'].color = couleur_magenta - - # I/O à l'état initial - scene.objects['Module led']['actif']=False - scene.objects['Ensemble moteur']['actif_ouvrir']=False - scene.objects['Ensemble moteur']['actif_fermer']=False - scene.objects['Capteur fdc ouvert']['actif'] =True - scene.objects['Capteur fdc ferme']['actif'] =False - scene.objects['Module emetteur IR']['actif'] =False - scene.objects['Module recepteur IR']['actif'] =False - scene.objects['Module bouton cote rue']['actif'] =False - scene.objects['Module bouton cote cour']['actif'] =False - -## -# Click sur les éléments cliquables du systèmes -## - -def system_click(cont, obj_activation): - obj = cont.owner - if cont.sensors['MO'].status == JUST_ACTIVATED : - obj.color = couleur_blanc - obj['MO']=True - if cont.sensors['Click'].status == JUST_ACTIVATED and scene.objects['System']['manip_mode']==0: - if obj['MO']: - obj_activation['actif'] = True - obj.color = couleur_jaune - if cont.sensors['MO'].status == JUST_RELEASED : - obj['MO']=False - if cont.sensors['Click'].status == ACTIVATE : - obj.color = couleur_jaune - else: - obj.color = couleur_orange - if cont.sensors['Click'].status == JUST_RELEASED: - obj_activation['actif'] = False - obj.color = couleur_blanc - if cont.sensors['MO'].status != ACTIVATE : - obj.color = couleur_orange diff --git a/portail_coulissant/porcou_lib-bak.py b/portail_coulissant/porcou_lib-bak.py deleted file mode 100644 index 6c1f870..0000000 --- a/portail_coulissant/porcou_lib-bak.py +++ /dev/null @@ -1,406 +0,0 @@ -import bge # Bibliothèque Blender Game Engine (UPBGE) -import threading # Multithreading -import trace -import sys -import time - -import serial # Liaison série -import pyfirmata # Protocole Firmata -from serial.tools.list_ports import comports # Détection du port automatique - -############################################################################### -# porcou_lib.py -# @title: Bibliothèque utilisateur du portail coulissant -# @project: Blender-EduTech -# @lang: fr -# @authors: Philippe Roy -# @copyright: Copyright (C) 2020-2022 Philippe Roy -# @license: GNU GPL -############################################################################### - -scene = bge.logic.getCurrentScene() - -# Threads -threads_cmd=[] -debug_thread = scene.objects['System']['debug_thread'] - -# Jumeau numérique -board = None -board_it = None # Iterator (input) -bp_int_pin = None -bp_ext_pin = None -fdc_o_pin = None -fdc_f_pin = None -ir_emett_pin = None -ir_recept_pin = None -mot_o_pin = None -mot_f_pin = None -gyr_pin = None - -# UPBGE constants -JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED -JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED -ACTIVATE = bge.logic.KX_INPUT_ACTIVE -# JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED - -############################################################################### -# Méthode kill pour les tâches (threads) -############################################################################### - -class thread_with_trace(threading.Thread): - def __init__(self, *args, **keywords): - threading.Thread.__init__(self, *args, **keywords) - self.killed = False - - def start(self): - self.__run_backup = self.run - self.run = self.__run - threading.Thread.start(self) - - def __run(self): - sys.settrace(self.globaltrace) - self.__run_backup() - self.run = self.__run_backup - - def globaltrace(self, frame, event, arg): - if event == 'call': - return self.localtrace - else: - return None - - def localtrace(self, frame, event, arg): - if self.killed: - if event == 'line': - raise SystemExit() - return self.localtrace - - def kill(self): - self.killed = True - -############################################################################### -# Start et stop des tâches (threads) -############################################################################### - -def thread_start(threads, type_txt, fct): - threads.append(thread_with_trace(target = fct)) - threads[len(threads)-1].start() - if (debug_thread): - print ("Thread",type_txt, "#", len(threads)-1, "open.") - -def thread_stop(threads, type_txt): - i=0 - zombie_flag=False - for t in threads: - if not t.is_alive(): - if (debug_thread): - print ("Thread",type_txt, "#",i,"closed.") - else: - if (debug_thread): - print ("Thread",type_txt, "#",i,"still open ...") - t.kill() - t.join() - if not t.is_alive(): - if (debug_thread): - print ("Thread",type_txt, "#",i,"killed.") - else: - if (debug_thread): - print ("Thread",type_txt, "#",i,"zombie...") - zombie_flag=True - i +=1 - if zombie_flag==False: - if (debug_thread): - print ("All threads",type_txt, "are closed.") - scene.objects['System']['thread_cmd']=False - return True - else: - if (debug_thread): - print ("There are zombies threads",type_txt, ".") - return False - -def thread_cmd_start(fct): - thread_start(threads_cmd, "commands", fct) - -def thread_cmd_stop(): - thread_stop(threads_cmd, "commands") - -def end(): - - # Jumeau numérique - if scene.objects['System']['twins']: - # serial_msg = "FI\n" - # twins_serial.write(serial_msg.encode()) # Communication série : modele 3d -> carte communication ( arduino | micro:bit ) - jumeau_close() - - # Thread - if (debug_thread): - print ("Thread commands is arrived.") - time.sleep(0.125) - scene.objects['System']['thread_cmd']=False - time.sleep(0.125) - -def fin(): - end() - -def quit(): - end() - -############################################################################### -# Actionneurs -############################################################################### - -# Ordres utilisateur du clignotant -def gyr(ordre): - global gyr_pin - scene.objects['Module led']['actif']=ordre - if scene.objects['System']['twins'] : - if ordre : - gyr_pin.write(1) - else: - gyr_pin.write(0) - -# Ordres utilisateur du moteur -def mot_o(ordre): - scene.objects['Ensemble moteur']['actif_ouvrir']=ordre - -def mot_f(ordre): - scene.objects['Ensemble moteur']['actif_fermer']=ordre - -# Ordre utilisateur du capteur barrage IR -def ir_emet(ordre): - scene.objects['Module emetteur IR']['actif']=ordre - -############################################################################### -# Capteurs -############################################################################### - -# Compte-rendu utilisateur du capteur fin de course portail ouvert -def fdc_o (): - return scene.objects['Capteur fdc ouvert']['actif'] - -# Compte-rendu utilisateur du capteur fin de course portail ouvert -def fdc_f (): - return scene.objects['Capteur fdc ferme']['actif'] - -# Compte-rendu utilisateur du capteur barrage IR -def ir_recep (): - if scene.objects['Module recepteur IR']['actif'] : - return False - else: - return True - -############################################################################### -# Boutons poussoirs -############################################################################### - -# Compte-rendu utilisateur du bouton pousssoir coté rue -def bp_ext (): - return scene.objects['Module bouton cote rue']['actif'] - -# Compte-rendu utilisateur du bouton pousssoir coté cour -def bp_int (): - return scene.objects['Module bouton cote cour']['actif'] - -############################################################################### -# Temporisation -############################################################################### - -def tempo (duree): - time.sleep(duree) - -############################################################################### -# Jumeau numérique -############################################################################### - -## -# Recherche automatique du port -## - -def serial_autoget_port(): - # USB Vendor ID, USB Product ID - board_dict={'microbit' :[3368, 516], - 'uno' :[9025, 67], - 'mega' :[9025, 66]} - for com in comports(): # Arduino Uno - if com.vid == board_dict["uno"][0] and com.pid == board_dict["uno"][1]: - return [com.device,"Arduino Uno"] - for com in comports(): # Arduino Mega - if com.vid == board_dict["mega"][0] and com.pid == board_dict["mega"][1]: - return [com.device,"Arduino Mega"] - return [None,""] - -## -# Création de l'objet carte (protocole Firmata) -## - -def board_init(port): - try: - return pyfirmata.Arduino(port) - except: - return None - -## -# Création de l'objet serial (communication série) -## - -def serial_init(port,speed): - try: - return serial.Serial(port,speed) - except: - return None - -## -# Affiche la liste des cartes (communication série) -## - -def serial_devices(): - for com in comports(): - print ("Name : "+str(com.name)+"\n" - +" Device : "+str(com.device)+"\n" - +" Hardware ID : "+str(com.hwid)+"\n" - +" USB Vendor ID : "+str(com.vid)+"\n" - +" USB Product ID : "+str(com.pid)+"\n" - +" USB device location : "+str(com.location)+"\n" - +" USB manufacturer : "+str(com.manufacturer)+"\n" - +" USB product : "+str(com.product)+"\n" - +" Interface-specific : "+str(com.interface)) - -## -# Activation de la communication avec la carte de communication (Arduino, Micro:bit) -# Vitesse : 115200 -> 7 fps, 38400 -> 6 fps, 9600 -> 2 fps -# pyserial : baudrate=115200 -# pyfirmata : baudrate=57600 -## - -def jumeau(pins): - global board - # global gyr_pin - - # UI : étape 1 - scene.objects['Twins-icon'].setVisible(True,True) - scene.objects['Twins-text']['Text'] = "Connection en cours ..." - scene.objects['Twins-text'].setVisible(True,False) - - # Mise en place de la carte - speed = 57600 - [device,board_name] =serial_autoget_port() # Recherche automatique du port - if device is None: - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Aucune connection disponible : jumeau réel débranché." - return False - board = board_init(device) - if board is None: - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Aucune connection disponible : port "+device+" pas prêt" - return False - scene.objects['System']['twins'] = True - # scene.objects['System']['twins_close'] = False - scene.objects['System']['twins_port'] = device - scene.objects['System']['twins_speed'] = speed - # scene.objects['System']['twins_readline'] = "" - board_it = pyfirmata.util.Iterator(board) # Itérateur pour les entrées - board_it.start() - - # UI : étape 2 - if board =="": - scene.objects['Twins-text']['Text'] = "Connection ouverte : "+device+" - "+str(speed)+" baud." - else: - scene.objects['Twins-text']['Text'] = "Connection ouverte : "+board_name+" sur "+device+" à "+str(speed)+" baud." - tempo (0.1) - - # Déclaration des entrées - sorties - for pin in pins: - print (pin) - # if - # bp_ext_pin = board_io('d:'+str(es_dict['bp_ext'])+':i') # Bouton poussoir coté rue - # bp_int_pin = board_io('d:'+str(es_dict['bp_int'])+':i') # Bouton poussoir coté cour - # fdc_o_pin = board_io('d:'+str(es_dict['fdc_o'])+':i') # Capteur fin de course portail ouvert - # fdc_f_pin = board_io('d:'+str(es_dict['fdc_f'])+':i') # Capteur fin de course portail fermé - # ir_recept_pin = board_io('d:'+str(es_dict['ir_recept'])+':i') # Recepteur pour le capteur barrage IR - - # gyr_pin = board_io('d:'+str(es_dict['gyr'])+':o') # Gyrophare - # mot_o_pin = board_io('d:'+str(es_dict['mot_o'])+':o') # Ouvrir le portail (moteur sens trigo) - # mot_f_pin = board_io('d:'+str(es_dict['mot_f'])+':o') # Fermer le portail (moteur sens horaire - # ir_emett_pin = board_io('d:'+str(es_dict['ir_emett'])+':o') # Emetteur pour le capteur barrage IR - return True - -# def board_io(da,pin,io): -# if pin_def is not None: -# return board.get_pin(da+':'+pin_def) -# else: -# print ("Définition entrée-sortie non trouvée : "+pin_def) - -## -# Fermeture de la communication série -## - -def jumeau_close(): - global board - # twins_serial.close() # Fermer proprement le port série - board.exit() # Fermer proprement la communication avec la carte - scene.objects['System']['twins'] = False - scene.objects['Twins-text']['Text'] = "Connection fermée." - -# Configuration du port -# FIXME -def jumeau_config(port, speed): - # global board - pass - # global twins_serial - # if scene.objects['System']['twins']: - # serial_msg1 = "CF\n" - # twins_serial.write(serial_msg1.encode()) - # tempo (1) - # serial_msg2 = str(speed)+"\n" - # twins_serial.write(serial_msg2.encode()) - # tempo (1) - # serial_msg3 = str(temps_avancer)+"\n" - # twins_serial.write(serial_msg3.encode()) - # tempo (1) - # serial_msg4 = str(temps_tourner)+"\n" - # twins_serial.write(serial_msg4.encode()) - # tempo (1) - # serial_msg5 = "FC\n" - # twins_serial.write(serial_msg5.encode()) - -## -# Envoi d'un message vers la communication série -## - -# def serie_msg(text): -# global twins_serial -# text2= text+"\n" -# scene.objects['Twins-text']['Text'] = "Communication : envoi message : "+text -# twins_serial.write(text2.encode()) - -## -# Mise en écoute de jumeau numérique (figeage de la scène) -## - -# def twins_listen(cont): -# global twins_serial -# if scene.objects['System']['twins']: -# if scene.objects['System']['twins_readline'] != "": -# scene.objects['Twins-text']['Text'] = "Écoute de la connection figeage de la scène.... Message reçu : "+scene.objects['System']['twins_readline'] -# else: -# scene.objects['Twins-text']['Text'] = "Écoute de la connection figeage de la scène..." -# if cont.sensors['Property'].positive: -# if scene.objects['System']['twins_listen'] : -# serial_msg = twins_serial.readline() -# if serial_msg is not None: -# scene.objects['System']['twins_readline'] = str(serial_msg) -# # scene.objects['Twins-text']['Text'] = "Message reçu : "+str(serial_msg) -# scene.objects['System']['twins_listen'] = False - -## -# Réception d'un message de la communication série -## - -# def serie_rcpt(): -# # scene.objects['Twins-text']['Text'] = "Écoute de la \nconnection\n figeage de \n la scène" -# scene.objects['System']['twins_readline'] = "" -# scene.objects['System']['twins_listen'] = True -# while scene.objects['System']['twins_readline'] == "": -# if scene.objects['System']['twins_readline'] != "": -# break -# # scene.objects['Twins-text']['Text'] = "Connection\nouverte :\n"+scene.objects['System']['twins_port']+"\n"+str(scene.objects['System']['twins_speed'])+" baud" -# return scene.objects['System']['twins_readline'] diff --git a/portail_coulissant/portail_coulissant-11.blend b/portail_coulissant/portail_coulissant-11.blend deleted file mode 100644 index f7e968a..0000000 Binary files a/portail_coulissant/portail_coulissant-11.blend and /dev/null differ diff --git a/portail_coulissant/portail_coulissant-12.blend b/portail_coulissant/portail_coulissant-12.blend deleted file mode 100644 index 258996b..0000000 Binary files a/portail_coulissant/portail_coulissant-12.blend and /dev/null differ diff --git a/portail_coulissant/portail_coulissant-13.blend b/portail_coulissant/portail_coulissant-13.blend deleted file mode 100644 index 40b3fcd..0000000 Binary files a/portail_coulissant/portail_coulissant-13.blend and /dev/null differ diff --git a/portail_coulissant/portail_coulissant-14.blend b/portail_coulissant/portail_coulissant-14.blend deleted file mode 100644 index 9b4ad44..0000000 Binary files a/portail_coulissant/portail_coulissant-14.blend and /dev/null differ