mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
Ajout de la variante 2 pour le volet roulant
This commit is contained in:
parent
01e37f5ce7
commit
0c6e1a3cf3
88
twin.py
88
twin.py
@ -53,7 +53,6 @@ color_blue_dark = (0.004, 0.054, 0.296, 1) # Couleur Blue (Actionneur type moteu
|
|||||||
color_grey = (0.285, 0.285, 0.285, 1) # Couleur Blue (Actionneur type moteur)
|
color_grey = (0.285, 0.285, 0.285, 1) # Couleur Blue (Actionneur type moteur)
|
||||||
color_led_yellow = (0.799, 0.617, 0.021, 1) # Couleur Led Jaune
|
color_led_yellow = (0.799, 0.617, 0.021, 1) # Couleur Led Jaune
|
||||||
|
|
||||||
|
|
||||||
# Constantes
|
# Constantes
|
||||||
JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
|
JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
|
||||||
JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED
|
JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED
|
||||||
@ -159,8 +158,14 @@ def cmd_init():
|
|||||||
scene.objects['Script-text']['Text']=scene.objects['System']['script']
|
scene.objects['Script-text']['Text']=scene.objects['System']['script']
|
||||||
scene.objects['Twins-text']['Text']="Connection fermée."
|
scene.objects['Twins-text']['Text']="Connection fermée."
|
||||||
|
|
||||||
|
# Mise en place de la variante
|
||||||
|
# scene.objects['System']['variant'] = int(twin_config[0][2].text)
|
||||||
|
# scene.active_camera = scene.objects["Camera"]
|
||||||
|
# scene.objects['Sun'].setVisible(True,True)
|
||||||
|
# scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud'])
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
windows=("Doc", "Doc_chap-general", "Doc_chap-system", "Doc_chap-python", "About")
|
windows=("Doc", "Doc_chap-general", "Doc_chap-system", "Doc_chap-python", "About", "Credits")
|
||||||
for window in windows:
|
for window in windows:
|
||||||
scene.objects[window].setVisible(False,True)
|
scene.objects[window].setVisible(False,True)
|
||||||
|
|
||||||
@ -311,10 +316,10 @@ def manip_init():
|
|||||||
scene.objects['Sun'].setVisible(True,True)
|
scene.objects['Sun'].setVisible(True,True)
|
||||||
scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud'])
|
scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud'])
|
||||||
|
|
||||||
# Fenêtres
|
# # Fenêtres
|
||||||
scene.objects['About'].setVisible(False,True)
|
# scene.objects['About'].setVisible(False,True)
|
||||||
scene.objects['Credits'].setVisible(False,True)
|
# scene.objects['Credits'].setVisible(False,True)
|
||||||
scene.objects['Doc'].setVisible(False,True)
|
# scene.objects['Doc'].setVisible(False,True)
|
||||||
|
|
||||||
# Mémorisation de la position de la caméra
|
# Mémorisation de la position de la caméra
|
||||||
scene.objects['Camera']['init_lx']=scene.objects['Camera'].worldPosition.x
|
scene.objects['Camera']['init_lx']=scene.objects['Camera'].worldPosition.x
|
||||||
@ -479,7 +484,7 @@ def file_open():
|
|||||||
else: # Qt5 ne s'installe pas bien sur Windows -> wxPython
|
else: # Qt5 ne s'installe pas bien sur Windows -> wxPython
|
||||||
scene.objects['System']['file_proc'] = subprocess.Popen([sys.executable, os.path.join(os.getcwd(), "twin_file_wx.py")], stdout=subprocess.PIPE, encoding = 'utf8')
|
scene.objects['System']['file_proc'] = subprocess.Popen([sys.executable, os.path.join(os.getcwd(), "twin_file_wx.py")], stdout=subprocess.PIPE, encoding = 'utf8')
|
||||||
|
|
||||||
# Récupérer le nom du fchier
|
# Récupérer le nom du fchier
|
||||||
stout = scene.objects['System']['file_proc'].communicate()
|
stout = scene.objects['System']['file_proc'].communicate()
|
||||||
if stout[0][:-1] != 'None' and len(stout[0][:-1])>0 :
|
if stout[0][:-1] != 'None' and len(stout[0][:-1])>0 :
|
||||||
scene.objects['System']['script'] = stout[0][:-1]
|
scene.objects['System']['script'] = stout[0][:-1]
|
||||||
@ -595,7 +600,7 @@ def cycle_hl(cont):
|
|||||||
if cont.sensors['MO'].status == JUST_ACTIVATED:
|
if cont.sensors['MO'].status == JUST_ACTIVATED:
|
||||||
obj['mo'] = True
|
obj['mo'] = True
|
||||||
|
|
||||||
# Composant avec un goupe de couleur (type actionneur)
|
# Composant avec un groupe de couleur
|
||||||
if "color_group" in obj.getPropertyNames():
|
if "color_group" in obj.getPropertyNames():
|
||||||
for obj_name in obj['color_group']:
|
for obj_name in obj['color_group']:
|
||||||
scene.objects[obj_name].color = color_hl
|
scene.objects[obj_name].color = color_hl
|
||||||
@ -618,7 +623,7 @@ def cycle_hl(cont):
|
|||||||
obj.color = color_passive
|
obj.color = color_passive
|
||||||
return
|
return
|
||||||
|
|
||||||
# Composant avec un goupe de couleur (type actionneur)
|
# Composant avec un groupe de couleur
|
||||||
if "color_group" in obj.getPropertyNames():
|
if "color_group" in obj.getPropertyNames():
|
||||||
for obj_name in obj['color_group']:
|
for obj_name in obj['color_group']:
|
||||||
cycle_actuator_color(obj_name)
|
cycle_actuator_color(obj_name)
|
||||||
@ -657,6 +662,50 @@ def cycle_click(cont):
|
|||||||
else:
|
else:
|
||||||
obj.color = color_active
|
obj.color = color_active
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Click sur les éléments comutables du système (activation numérique)
|
||||||
|
##
|
||||||
|
|
||||||
|
def cycle_switch(cont):
|
||||||
|
obj = cont.owner
|
||||||
|
obj_on=scene.objects[obj.name+"-on"]
|
||||||
|
if scene.objects['System']['run'] ==False:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Passif
|
||||||
|
if "active" in obj.getPropertyNames():
|
||||||
|
if obj['active'] == False:
|
||||||
|
obj.color = color_passive
|
||||||
|
return
|
||||||
|
|
||||||
|
# Activation
|
||||||
|
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and scene.objects['System']['manip_mode']==0 and obj['prior']:
|
||||||
|
|
||||||
|
if obj['activated']: # On -> Off
|
||||||
|
obj.color = color_hl
|
||||||
|
obj['activated'] = False
|
||||||
|
obj['click'] = True
|
||||||
|
obj.setVisible(True,False)
|
||||||
|
obj_on.setVisible(False,False)
|
||||||
|
else: # Off -> On
|
||||||
|
obj_on.color = color_activated
|
||||||
|
obj['activated'] = True
|
||||||
|
obj['click'] = True
|
||||||
|
obj_on.setVisible(True,False)
|
||||||
|
obj.setVisible(False,False)
|
||||||
|
|
||||||
|
# Désactivation
|
||||||
|
if cont.sensors['Click'].status == JUST_RELEASED and obj['prior']:
|
||||||
|
obj['click'] = False
|
||||||
|
if cont.sensors['MO'].positive:
|
||||||
|
obj.color = color_hl
|
||||||
|
else:
|
||||||
|
if obj['activated']:
|
||||||
|
obj_on.color = color_activated
|
||||||
|
else:
|
||||||
|
obj.color = color_active
|
||||||
|
|
||||||
##
|
##
|
||||||
# Couleurs sur les éléments sensibles du système
|
# Couleurs sur les éléments sensibles du système
|
||||||
##
|
##
|
||||||
@ -703,7 +752,7 @@ def cycle_actuator_color(name):
|
|||||||
obj.color = color_led_yellow
|
obj.color = color_led_yellow
|
||||||
|
|
||||||
##
|
##
|
||||||
# Comportement standard des boutons
|
# Comportement standard des boutons poussoirs
|
||||||
##
|
##
|
||||||
|
|
||||||
def cycle_bp(cont):
|
def cycle_bp(cont):
|
||||||
@ -720,6 +769,25 @@ def cycle_bp(cont):
|
|||||||
# Couleurs
|
# Couleurs
|
||||||
cycle_sensitive_color(obj)
|
cycle_sensitive_color(obj)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Comportement standard des boutons à glissière
|
||||||
|
##
|
||||||
|
|
||||||
|
def cycle_bg(cont):
|
||||||
|
obj = cont.owner
|
||||||
|
|
||||||
|
# Arduino -> Modele 3D
|
||||||
|
if scene.objects['System']['twins'] and obj['prior_real']:
|
||||||
|
if obj['pin'] is not None :
|
||||||
|
if obj['pin'].read()==True and obj['activated_real'] == False :
|
||||||
|
obj['activated_real'] = True
|
||||||
|
if obj['pin'].read()==False and obj['activated_real'] == True :
|
||||||
|
obj['activated_real'] = False
|
||||||
|
|
||||||
|
# Couleurs
|
||||||
|
# FIXME à verifier
|
||||||
|
cycle_sensitive_color(obj)
|
||||||
|
|
||||||
##
|
##
|
||||||
# Comportement standard des voyants
|
# Comportement standard des voyants
|
||||||
##
|
##
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<data>
|
<data>
|
||||||
<screen>
|
<screen>
|
||||||
<width>1609</width>
|
<width>1590</width>
|
||||||
<height>905</height>
|
<height>895</height>
|
||||||
<quality>1</quality>
|
<quality>1</quality>
|
||||||
</screen>
|
</screen>
|
||||||
<plot>
|
<plot>
|
||||||
|
Binary file not shown.
@ -46,6 +46,8 @@ public_vars = {
|
|||||||
'mot_pas' : [['Moteur','step','a'], [], []],
|
'mot_pas' : [['Moteur','step','a'], [], []],
|
||||||
'bp_auto' : [['Bp auto','activated','d'], ['pin', 'd','i'], []],
|
'bp_auto' : [['Bp auto','activated','d'], ['pin', 'd','i'], []],
|
||||||
'bp_auto_r' : [['Bp auto','activated_real','d'], [], []],
|
'bp_auto_r' : [['Bp auto','activated_real','d'], [], []],
|
||||||
|
'bg_auto' : [['Bg auto','activated','d'], ['pin', 'd','i'], []],
|
||||||
|
'bg_auto_r' : [['Bg auto','activated_real','d'], [], []],
|
||||||
'voy_auto' : [['Led auto','activated','d'], ['pin', 'd','o'], []],
|
'voy_auto' : [['Led auto','activated','d'], ['pin', 'd','o'], []],
|
||||||
'lum' : [['Recepteur LDR','activated','a'], ['pin', 'd','i'], []], # FIXME : Basculer en analogique
|
'lum' : [['Recepteur LDR','activated','a'], ['pin', 'd','i'], []], # FIXME : Basculer en analogique
|
||||||
'lum_r' : [['Recepteur LDR','activated_real','a'], [], []]}
|
'lum_r' : [['Recepteur LDR','activated_real','a'], [], []]}
|
||||||
@ -89,12 +91,16 @@ def init(cont):
|
|||||||
["Moteur vis1","grey"],
|
["Moteur vis1","grey"],
|
||||||
["Moteur vis2","grey"]], "Moteur : mot_m(True | False), mot_d(True | False)")
|
["Moteur vis2","grey"]], "Moteur : mot_m(True | False), mot_d(True | False)")
|
||||||
twin.cycle_def_focusgroup([["Led auto", "led_yellow"]], "Voyant témoin mode automatique : voy_auto(True | False)")
|
twin.cycle_def_focusgroup([["Led auto", "led_yellow"]], "Voyant témoin mode automatique : voy_auto(True | False)")
|
||||||
|
# twin.cycle_def_focusgroup([["Bg auto", "color_active"],
|
||||||
|
# ["Bg auto-on", "color_active"]], "Voyant témoin mode automatique : voy_auto(True | False)")
|
||||||
|
|
||||||
# Description des composants sensibles
|
# Description des composants sensibles
|
||||||
scene.objects['Bp monter']['description']="Bouton poussoir monter volet : bp_m()"
|
scene.objects['Bp monter']['description']="Bouton poussoir monter volet : bp_m()"
|
||||||
scene.objects['Bp descendre']['description']="Bouton poussoir descendre volet : bp_d()"
|
scene.objects['Bp descendre']['description']="Bouton poussoir descendre volet : bp_d()"
|
||||||
scene.objects['Bp arret']['description']="Bouton poussoir arrêt volet : bp_a()"
|
scene.objects['Bp arret']['description']="Bouton poussoir arrêt volet : bp_a()"
|
||||||
scene.objects['Bp auto']['description']="Bouton poussoir mode automatique : bp_auto()"
|
scene.objects['Bp auto']['description']="Bouton poussoir mode automatique : bp_auto()"
|
||||||
|
scene.objects['Bg auto']['description']="Bouton à glissière mode automatique : bg_auto()"
|
||||||
|
scene.objects['Bg auto-on']['description']="Bouton à glissière mode automatique : bg_auto()"
|
||||||
scene.objects['Microrupteur haut']['description']="Capteur fin de course volet en haut : fdc_h()"
|
scene.objects['Microrupteur haut']['description']="Capteur fin de course volet en haut : fdc_h()"
|
||||||
scene.objects['Microrupteur bas']['description']="Capteur fin de course volet en bas : fdc_b()"
|
scene.objects['Microrupteur bas']['description']="Capteur fin de course volet en bas : fdc_b()"
|
||||||
scene.objects['Recepteur LDR']['description']="Capteur de luminosité (LDR) : lum()"
|
scene.objects['Recepteur LDR']['description']="Capteur de luminosité (LDR) : lum()"
|
||||||
@ -427,10 +433,11 @@ def system_init ():
|
|||||||
def system_reset ():
|
def system_reset ():
|
||||||
|
|
||||||
# Entrées à l'état initial
|
# Entrées à l'état initial
|
||||||
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR']
|
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR']
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
scene.objects[obj]['activated']=False
|
scene.objects[obj]['activated']=False
|
||||||
scene.objects[obj]['activated_real']=False
|
scene.objects[obj]['activated_real']=False
|
||||||
|
scene.objects['Bg auto-on'].setVisible(False,False)
|
||||||
|
|
||||||
# Voyants aux états initiaux
|
# Voyants aux états initiaux
|
||||||
scene.objects['Led auto']['activated']=False
|
scene.objects['Led auto']['activated']=False
|
||||||
@ -475,7 +482,7 @@ def system_reset ():
|
|||||||
obj['frame_down']= 100-obj['frame_up']
|
obj['frame_down']= 100-obj['frame_up']
|
||||||
|
|
||||||
# Priorités activées
|
# Priorités activées
|
||||||
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR',
|
objs= ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut','Microrupteur bas', 'Recepteur LDR',
|
||||||
'Moteur', 'Led auto']
|
'Moteur', 'Led auto']
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
scene.objects[obj]['prior']=True
|
scene.objects[obj]['prior']=True
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
||||||
|
volrou_variante(2) # Variante 2 de la maquette 3D du volet roulant
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# volrou_cmd.py
|
# volrou_cmd.py
|
||||||
@ -21,7 +22,8 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
|||||||
# - Bouton poussoir monter volet : bp_m()
|
# - Bouton poussoir monter volet : bp_m()
|
||||||
# - Bouton poussoir arrêt volet : bp_a()
|
# - Bouton poussoir arrêt volet : bp_a()
|
||||||
# - Bouton poussoir descendre volet : bp_d()
|
# - Bouton poussoir descendre volet : bp_d()
|
||||||
# - Bouton poussoir mode automatique : bp_auto()
|
# - Bouton poussoir mode automatique : bp_auto() (variante 1)
|
||||||
|
# - Bouton à glissière mode automatique : bg_auto() (variante 2)
|
||||||
#
|
#
|
||||||
# Retour d'information du pupitre (allumer = True ou False) :
|
# Retour d'information du pupitre (allumer = True ou False) :
|
||||||
# - Voyant témoin mode automatique : voy_auto(True | False)
|
# - Voyant témoin mode automatique : voy_auto(True | False)
|
||||||
@ -41,6 +43,15 @@ from volrou_lib import * # Bibliothèque utilisateur du volet roulant
|
|||||||
|
|
||||||
def commandes():
|
def commandes():
|
||||||
|
|
||||||
|
daq(['bg_auto', 'voy_auto'])
|
||||||
|
plot (['bg_auto', 'voy_auto'])
|
||||||
|
|
||||||
|
while True:
|
||||||
|
if bg_auto():
|
||||||
|
voy_auto(True) # Activer le voyant du mode automatique
|
||||||
|
else:
|
||||||
|
voy_auto(False)
|
||||||
|
|
||||||
daq(['mot_angle', 'mot_vitesse'])
|
daq(['mot_angle', 'mot_vitesse'])
|
||||||
plot (['mot_angle', 'mot_vitesse'])
|
plot (['mot_angle', 'mot_vitesse'])
|
||||||
# plot ([['mot_angle', 'mot_vitesse']])
|
# plot ([['mot_angle', 'mot_vitesse']])
|
||||||
|
@ -98,19 +98,25 @@ def bp_d ():
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Compte-rendu du bouton mode automatique
|
# Compte-rendu du bouton poussoir mode automatique
|
||||||
def bp_auto ():
|
def bp_auto ():
|
||||||
if scene.objects['Bp auto']['activated'] or scene.objects['Bp auto']['activated_real']:
|
if scene.objects['Bp auto']['activated'] or scene.objects['Bp auto']['activated_real']:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# Compte-rendu du bouton à glissière mode automatique
|
||||||
|
def bg_auto ():
|
||||||
|
if scene.objects['Bg auto']['activated'] or scene.objects['Bg auto']['activated_real']:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Jumelage
|
# Jumelage
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Mode de jumelage (règles d'activation)
|
# Mode de jumelage (règles d'activation)
|
||||||
def jumeau_mode (input_real=True, input_digital=True, output_real=True, output_digital=True):
|
def jumeau_mode (input_real=True, input_digital=True, output_real=True, output_digital=True):
|
||||||
input_objs = ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Microrupteur haut', 'Microrupteur bas', 'Recepteur LDR']
|
input_objs = ['Bp monter', 'Bp arret', 'Bp descendre', 'Bp auto', 'Bg auto', 'Microrupteur haut', 'Microrupteur bas', 'Recepteur LDR']
|
||||||
output_objs = ['Moteur', 'Led auto']
|
output_objs = ['Moteur', 'Led auto']
|
||||||
jumeau_mode_system (input_objs, output_objs, input_real, input_digital, output_real, output_digital)
|
jumeau_mode_system (input_objs, output_objs, input_real, input_digital, output_real, output_digital)
|
||||||
|
|
||||||
@ -146,6 +152,32 @@ def reset_t ():
|
|||||||
def start(fct):
|
def start(fct):
|
||||||
twin_threading.start(threads_cmd, "commands", fct)
|
twin_threading.start(threads_cmd, "commands", fct)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Variante
|
||||||
|
#
|
||||||
|
# Variante 1 : Le mode automatique s'active avec le bouton poussoir bp_auto et se désactive avec l'appui sur bp_m, bp_a ou bp_d.
|
||||||
|
# Variante 2 : Le mode automatique s'active avec le bouton à glissière bg_auto.
|
||||||
|
#
|
||||||
|
# La variante 1 correspond à la maquette réelle de 4A technologie.
|
||||||
|
#
|
||||||
|
# Configuration des variantes du modèle 3D -> variant_dict :
|
||||||
|
# 'nom de l'objet 3D' : liste des variantes où l'objet est présent.
|
||||||
|
# Par défaut les objets sont présents quelque soit la variante sélectionnée.
|
||||||
|
##
|
||||||
|
|
||||||
|
def volrou_variante(variant):
|
||||||
|
if variant != scene.objects['System']['variant']:
|
||||||
|
print ("Variante de la maquette numérique:", variant)
|
||||||
|
scene.objects['System']['variant']=variant
|
||||||
|
variant_dict = {'Bp auto':[1], 'Bg auto':[2], 'Bg auto-on':[2]}
|
||||||
|
variant_list = list(variant_dict)
|
||||||
|
for name in variant_list:
|
||||||
|
if variant in variant_dict[name]:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
scene.objects[name].setVisible(False,True)
|
||||||
|
scene.objects[name].suspendPhysics()
|
||||||
|
|
||||||
##
|
##
|
||||||
# Arrêt
|
# Arrêt
|
||||||
##
|
##
|
||||||
|
Loading…
x
Reference in New Issue
Block a user