diff --git a/monte_charge/montchg.py b/monte_charge/montchg.py index c872947..f4ed3ad 100644 --- a/monte_charge/montchg.py +++ b/monte_charge/montchg.py @@ -262,3 +262,6 @@ def system_reset (): scene.objects['Bp niveau 1']['activated']=False scene.objects['Microrupteur niveau 0']['activated']=False scene.objects['Microrupteur niveau 1']['activated']=False + scene.objects['Moteur']['up']=False + scene.objects['Moteur']['down']=False + diff --git a/monte_charge/montchg_cmd.py b/monte_charge/montchg_cmd.py index 94b2720..8a5c5e5 100644 --- a/monte_charge/montchg_cmd.py +++ b/monte_charge/montchg_cmd.py @@ -16,11 +16,11 @@ from montchg_lib import * # Bibliothèque portail coulissant # - Capteur présence cabine niveau 0 : pc_0() # - Capteur présence cabine niveau 1 : pc_1() # -# Les consigne du pupitre (valeur retournée = True ou False) : +# Les consignes du pupitre (valeur retournée = True ou False) : # - Bouton poussoir appel niveau 0 : ba_0() # - Bouton poussoir appel niveau 1 : ba_1() # -# Les retours d'informations du pupitre (allumer = True ou False) : +# Les retours d'information du pupitre (allumer = True ou False) : # - Voyant témoin d'étage niveau 0 : voy_0 (True | False) # - Voyant témoin d'étage niveau 1 : voy_1 (True | False) # diff --git a/monte_charge/monte_charge-3.blend b/monte_charge/monte_charge-3.blend index f312814..3d8b3c3 100644 Binary files a/monte_charge/monte_charge-3.blend and b/monte_charge/monte_charge-3.blend differ diff --git a/portail_coulissant/porcou-bak.py b/portail_coulissant/porcou-bak.py new file mode 100644 index 0000000..98d759a --- /dev/null +++ b/portail_coulissant/porcou-bak.py @@ -0,0 +1,301 @@ +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.py b/portail_coulissant/porcou.py index 26ae0d2..7be30ca 100644 --- a/portail_coulissant/porcou.py +++ b/portail_coulissant/porcou.py @@ -11,18 +11,16 @@ import time # @authors: Philippe Roy # @copyright: Copyright (C) 2020-2022 Philippe Roy # @license: GNU GPL -# -# Commandes déclenchées par/sur le simulateur (sml_*) ############################################################################### # 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 +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 @@ -56,42 +54,43 @@ def init(cont): ############################################################################### ## -# Action du simulateur pour le clignotant +# Gyrophare +# Modele 3d -> Arduino : FIXME +# Arduino -> Modele 3d : FIXME ## -def sml_clignotant (cont): +def gyr (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) + if obj['activated'] and scene.objects['Led-on'].visible == False: + scene.objects['Led-on'].setVisible(True,False) scene.objects['Led'].setVisible(False,False) - # print ("Clignotant allumée") - if obj['actif']==False and scene.objects['Led allumee'].visible == True: + if obj['activated']==False and scene.objects['Led-on'].visible == True: scene.objects['Led'].setVisible(True,False) - scene.objects['Led allumee'].setVisible(False,False) - # print ("Clignotant éteint") + scene.objects['Led-on'].setVisible(False,False) ## -# Action du simulateur pour le moteur +# Moteur et portail +# Modele 3d -> Arduino : FIXME +# Arduino -> Modele 3d : FIXME ## -def sml_moteur (cont): +def mot (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) + pas_portail = 2.35619/0.3 # pas echelle 1:1 = 2.35619 -> pas à l'échelle de la maquette (0,3) : 2.35619/0.3 = 7,85396 + pas_engrenage = math.pi/7 # z = 14 + obj_engrenage = scene.objects['Engrenage'] + obj_portail = scene.objects['Portail'] + obj_portail['x']= scene.objects['Portail'].localPosition.x # Affichage de la position du portail + if obj['open']: + obj_engrenage.applyRotation((0, 0, -pas_engrenage*vitesse), True) + obj_portail.applyMovement((-pas_portail*vitesse, 0, 0), True) + # else: # Pas de priorité + if obj['close']: + obj_engrenage.applyRotation((0, 0, pas_engrenage*vitesse), True) + obj_portail.applyMovement((pas_portail*vitesse, 0, 0), True) ############################################################################### # Capteurs fin de course @@ -99,63 +98,61 @@ def sml_moteur (cont): ## # Etat capteur fin de course portail ouvert +# Modele 3d -> Arduino : FIXME +# Arduino -> Modele 3d : FIXME ## -def sml_fdc_ouvert (cont): +def fdc_o (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 + if scene.objects['Portail'].localPosition.x <= 0 and obj['activated'] == False : + obj['activated'] = True + if scene.objects['Portail'].localPosition.x > 0 and obj['activated'] == True : + obj['activated'] = False + + # Forçage (click) + if obj['click'] == True: + obj['activated'] = 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 + if obj['activated'] == True and obj.color !=color_activated: + obj.color =color_activated + if obj['activated'] == False : + if obj['mo'] == True and obj.color !=color_hl: + obj.color =color_hl + if obj['mo'] == False and obj.color !=color_active: + obj.color =color_active ## # Etat capteur fin de course portail fermé +# Modele 3d -> Arduino : FIXME +# Arduino -> Modele 3d : FIXME ## -def sml_fdc_ferme (cont): +def fdc_f (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 + if scene.objects['Portail'].localPosition.x >= 218 and obj['activated'] == False : + obj['activated'] = True + if scene.objects['Portail'].localPosition.x < 218 and obj['activated'] == True : + obj['activated'] = False -## -# Forçage capteur fin de course avec la souris -## + # Forçage (click) + if obj['click'] == True: + obj['activated'] = True -def sml_microrupteur (cont): - if scene.objects['System']['run'] : - system_click(cont, cont.owner) + # Couleurs + if obj['activated'] == True and obj.color !=color_activated: + obj.color =color_activated + if obj['activated'] == False : + if obj['mo'] == True and obj.color !=color_hl: + obj.color =color_hl + if obj['mo'] == False and obj.color !=color_active: + obj.color =color_active ############################################################################### # Capteur barrage @@ -165,53 +162,54 @@ def sml_microrupteur (cont): # Emetteur IR ## -def sml_emet_ir (cont): +def ir_emet (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) + obj_recepteur=scene.objects['Recepteur IR'] + if obj['active'] and scene.objects['Emetteur IR Led-on'].visible == False: + scene.objects['Emetteur IR Led-on'].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: + obj.color = color_active + obj_recepteur.color = color_active + obj_recepteur['active'] = True + if obj['active']==False and scene.objects['Emetteur IR Led-on'].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 + scene.objects['Emetteur IR Led-on'].setVisible(False,False) + obj.color = color_passive + obj_recepteur.color = color_passive + obj_recepteur['active'] = False ############################################################################### -# Boutons poussoirs +# Boutons ############################################################################### -## -# Bouton pousssoir coté rue -## +# Modele 3d -> Arduino : FIXME +# Arduino -> Modele 3d : FIXME -def sml_bp_rue (cont): - if scene.objects['System']['run'] : - system_click(cont, scene.objects['Module bouton cote rue']) + # 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) -## -# Bouton pousssoir coté cour -## - -def sml_bp_cour (cont): - if scene.objects['System']['run'] : - system_click(cont, scene.objects['Module bouton cote cour']) + # # 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 ############################################################################### # Système @@ -223,18 +221,7 @@ def sml_bp_cour (cont): ## 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 + system_reset() ## # Réinitialisation du système @@ -256,48 +243,25 @@ def system_reset (): while (obj1.localOrientation.to_euler().y) < -1.1*rres : obj1.applyRotation((0, 0, rres), True) - # Led à l'état initial + # Gyrophare à l'état initial scene.objects['Led'].setVisible(True,False) - scene.objects['Led allumee'].setVisible(False,False) + scene.objects['Led-on'].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 + scene.objects['Emetteur IR Led-on'].setVisible(False,False) + scene.objects['Emetteur IR'].color = color_passive + scene.objects['Recepteur IR'].color = color_passive # 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 + scene.objects['Led']['activated']=False + scene.objects['Moteur']['open']=False + scene.objects['Moteur']['close']=False + scene.objects['Microrupteur fdc ouvert']['activated']=False + scene.objects['Microrupteur fdc ferme']['activated']=False + scene.objects['Bp cote cour']['activated'] =False + scene.objects['Bp cote rue']['activated'] =False + scene.objects['Emetteur IR']['activated'] =False + scene.objects['Emetteur IR']['active'] =False + scene.objects['Recepteur IR']['activated'] =False + scene.objects['Recepteur IR']['active'] =False diff --git a/portail_coulissant/porcou_cmd.py b/portail_coulissant/porcou_cmd.py index 562d1a6..77f3ccd 100644 --- a/portail_coulissant/porcou_cmd.py +++ b/portail_coulissant/porcou_cmd.py @@ -9,19 +9,19 @@ from porcou_lib import * # Bibliothèque portail coulissant # Instructions élémentaires pour le portail coulissant # # Actions (ordre = True ou 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) +# - 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) # # Capteurs (valeur retournée = True ou False) : # - Capteur fin de course portail ouvert : fdc_o() # - Capteur fin de course portail fermé : fdc_f() # - Capteur barrage IR (absence d'obstacle) : ir_recep() # -# Pupitre (valeur retournée = True ou False) : -# - Bouton poussoir coté rue : bp_ext() -# - Bouton poussoir coté cour : bp_int() +# Les consignes du pupitre (valeur retournée = True ou False) : +# - Bouton poussoir appel niveau 0 : ba_0() +# - Bouton poussoir appel niveau 1 : ba_1() # # Gestion du temps : # - Temporisation en seconde : tempo(duree) @@ -49,40 +49,42 @@ brochage={ ############################################################################### def commandes(): - jumeau(brochage) - for i in range (5): - gyr(True) - tempo(1) - gyr(False) - tempo(1) - - # # Mise en place : Fermeture - # while (fdc_f() ==False) : + # jumeau(brochage) + # for i in range (5): # gyr(True) - # mot_f(True) - # mot_f(False) - # gyr(False) + # tempo(1) + # gyr(False) + # tempo(1) - # # Fonctionnement normal - # while True : + # Mise en place : Fermeture + print ("go go ") + while fdc_f() ==False : + gyr(True) + mot_f(True) + print ("a") + mot_f(False) + gyr(False) - # # Ouverture - # if bp_int() or bp_ext() : - # while fdc_o() ==False: - # gyr(True) - # mot_o(True) - # gyr(False) - # mot_o(False) + # Fonctionnement normal + while True : - # tempo(2) # Temporisation + # Ouverture + if bp_int() or bp_ext() : + while fdc_o() ==False: + gyr(True) + mot_o(True) + gyr(False) + mot_o(False) - # # Fermeture - # while fdc_f() ==False: - # gyr(True) - # mot_f(True) - # gyr(False) - # mot_f(False) + tempo(2) # Temporisation + + # Fermeture + while fdc_f() ==False: + gyr(True) + mot_f(True) + gyr(False) + mot_f(False) # # Ecrire votre code ici ... # gyr(True) # Activer le gyrophare diff --git a/portail_coulissant/porcou_lib-bak.py b/portail_coulissant/porcou_lib-bak.py new file mode 100644 index 0000000..6c1f870 --- /dev/null +++ b/portail_coulissant/porcou_lib-bak.py @@ -0,0 +1,406 @@ +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/porcou_lib.py b/portail_coulissant/porcou_lib.py index f76b6b9..2942952 100644 --- a/portail_coulissant/porcou_lib.py +++ b/portail_coulissant/porcou_lib.py @@ -24,9 +24,11 @@ scene = bge.logic.getCurrentScene() threads_cmd=[] debug_thread = scene.objects['System']['debug_thread'] -# Jumeau numérique +# 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 @@ -127,8 +129,6 @@ 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 @@ -148,57 +148,55 @@ def quit(): # 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) +# Ordre du gyrophare +def gyr (order): + # global gyr_pin + scene.objects['Led']['activated']=order + # 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 +# Ordre pour le moteur phase ouvrir +def mot_o (order): + scene.objects['Moteur']['open']=order -def mot_f (ordre): - scene.objects['Ensemble moteur']['actif_fermer']=ordre +# Ordre pour le moteur phase fermer +def mot_f (order): + scene.objects['Moteur']['close']=order -# Ordre utilisateur du capteur barrage IR -def ir_emet(ordre): - scene.objects['Module emetteur IR']['actif']=ordre +# Ordre pour le capteur barrage IR +def ir_emet(order): + scene.objects['Emetteur IR']['active']=order ############################################################################### # Capteurs ############################################################################### -# Compte-rendu utilisateur du capteur fin de course portail ouvert +# Compte-rendu du capteur fin de course portail ouvert def fdc_o (): - return scene.objects['Capteur fdc ouvert']['actif'] + return scene.objects['Microrupteur fdc ouvert']['activated'] -# Compte-rendu utilisateur du capteur fin de course portail ouvert +# Compte-rendu du capteur fin de course portail ouvert def fdc_f (): - return scene.objects['Capteur fdc ferme']['actif'] + return scene.objects['Microrupteur fdc ferme']['activated'] -# Compte-rendu utilisateur du capteur barrage IR +# Compte-rendu du capteur barrage IR def ir_recep (): - if scene.objects['Module recepteur IR']['actif'] : - return False - else: - return True + return scene.objects['Recepteur IR']['activated'] ############################################################################### # Boutons poussoirs ############################################################################### -# Compte-rendu utilisateur du bouton pousssoir coté rue +# Compte-rendu du bouton pousssoir coté rue def bp_ext (): - return scene.objects['Module bouton cote rue']['actif'] + return scene.objects['Bp cote rue']['activated'] -# Compte-rendu utilisateur du bouton pousssoir coté cour +# Compte-rendu du bouton pousssoir coté cour def bp_int (): - return scene.objects['Module bouton cote cour']['actif'] + return scene.objects['Bp cote cour']['activated'] ############################################################################### # Temporisation diff --git a/portail_coulissant/portail_coulissant-14.blend b/portail_coulissant/portail_coulissant-14.blend index 0f034d0..9b4ad44 100644 Binary files a/portail_coulissant/portail_coulissant-14.blend and b/portail_coulissant/portail_coulissant-14.blend differ diff --git a/portail_coulissant/portail_coulissant-15.blend b/portail_coulissant/portail_coulissant-15.blend new file mode 100644 index 0000000..ebafdd8 Binary files /dev/null and b/portail_coulissant/portail_coulissant-15.blend differ diff --git a/twin.py b/twin.py index dfb8fd2..88c5b67 100644 --- a/twin.py +++ b/twin.py @@ -534,17 +534,26 @@ def cycle_end (cont): def cycle_hl(cont): obj = cont.owner - name=obj.name + # name=obj.name + + # Passif + if "active" in obj.getPropertyNames(): + if obj['mo'] == False: + return # Activation if cont.sensors['MO'].status == JUST_ACTIVATED and scene.objects['System']['run']: - scene.objects[name].color = color_hl - scene.objects[name]['mo'] = True + obj.color = color_hl + obj['mo'] = True + # scene.objects[name].color = color_hl + # scene.objects[name]['mo'] = True # Désactivation if cont.sensors['MO'].status == JUST_RELEASED: - scene.objects[name].color = color_active - scene.objects[name]['mo'] = False + obj.color = color_active + obj['mo'] = False + # scene.objects[name].color = color_active + # scene.objects[name]['mo'] = False ## # Click sur les éléments cliquables du systèmes (activation numérique) @@ -552,11 +561,17 @@ def cycle_hl(cont): def cycle_click(cont): obj = cont.owner - name=obj.name + # name=obj.name + + # Passif + if "active" in obj.getPropertyNames(): + if obj['mo'] == False: + return # 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.color = color_activated + # scene.objects[name].color = color_activated obj['activated'] = True obj['click'] = True # Modele 3d -> Arduino : FIXME @@ -567,6 +582,8 @@ def cycle_click(cont): obj['click'] = False # Modele 3d -> Arduino : FIXME if cont.sensors['MO'].positive: - scene.objects[name].color = color_hl + obj.color = color_hl + # scene.objects[name].color = color_hl else: - scene.objects[name].color = color_active + obj.color = color_active + # scene.objects[name].color = color_active diff --git a/twin_config.xml b/twin_config.xml index a8e0b1f..8f910b4 100644 --- a/twin_config.xml +++ b/twin_config.xml @@ -1,6 +1,6 @@ 1458 - 821 + 820 \ No newline at end of file