mirror of
https://forge.apps.education.fr/blender-edutech/jumeaux-numeriques.git
synced 2024-01-27 06:56:18 +01:00
Protocole Firmata accessible dans le script utilisateur
This commit is contained in:
parent
a8036081f4
commit
4ad5c99ddb
@ -79,6 +79,9 @@ def init(cont):
|
|||||||
|
|
||||||
system_init() # Initialisation du système
|
system_init() # Initialisation du système
|
||||||
|
|
||||||
|
def get_pin_config():
|
||||||
|
return pin_config
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Actionneurs
|
# Actionneurs
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -29,12 +29,13 @@ from montchg_lib import * # Bibliothèque portail coulissant
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Brochage du monte-charge
|
# Brochage du monte-charge (Grove)
|
||||||
brochage={
|
brochage={
|
||||||
'pc_0' : 2,'pc_1' : 3,
|
'pc_0' : ['d',7,'i'],'pc_1' : ['d',8,'i'],
|
||||||
'ba_0' : 4,'ba_1' : 5,
|
'ba_0' : ['a',0,'i'],'ba_1' : ['a',1,'i'],
|
||||||
'mot_m' : 6,'mot_d' : 7,
|
'voy_0' : ['d',5,'o'],'voy_1' : ['d',6,'o']}
|
||||||
'voy_0' : 8, 'voy_1' : 9}
|
# 'mot_m' : ['d',5,'o'],'mot_d' : ['d',6,'o'],
|
||||||
|
# 'voy_0' : ['d',3,'o'], 'voy_1' : ['d',4,'o']}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Fonctions
|
# Fonctions
|
||||||
|
@ -13,26 +13,29 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
||||||
system_card=["twins-card", "movement-card", "board-card", "model-card", "arduino-card"]
|
system_card=["twins-card", "firmata-card", "movement-card", "board-card", "model-card", "arduino-card"]
|
||||||
system_card_description ={}
|
system_card_description ={}
|
||||||
|
|
||||||
# Jumeau numérique
|
# Jumeau numérique
|
||||||
# Message envoyé (asynchrone) : \n avancer : a, reculer : r, droite : d, \n gauche g, marquer : m et forer : f \n\n\n """
|
|
||||||
card_twins_title="Jumeau numérique"
|
card_twins_title="Jumeau numérique"
|
||||||
card_twins_text=""" jumeau() \n -> Active le jumeau réel.\n
|
card_twins_text=""" jumeau(brochage) \n -> Active le jumeau réel.\n
|
||||||
jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
jumeau_stop() \n -> Désactive le jumeau réel.\n
|
||||||
Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
Le brochage est un dictionnaire, par \n exemple : brochage={ "bouton": ['d',2,'i'], \n "led": ['d',3,'o'] }.\n
|
||||||
La vitesse par défaut est 115200 baud."""
|
Avec "carte=jumeau(brochage)", on peut \n utiliser l'objet "carte" pour communiquer \n directement avec le protocole Firmata."""
|
||||||
|
# jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
||||||
|
# Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
||||||
|
# La vitesse par défaut est 115200 baud."""
|
||||||
card_twins_url=[]
|
card_twins_url=[]
|
||||||
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
||||||
|
|
||||||
# Liaison série
|
# Firmata
|
||||||
# card_serial_title="Liaison série"
|
card_firmata_title="Protocole Firmata"
|
||||||
# card_serial_text=""" serie_msg(texte) \n -> Envoi un message \n
|
card_firmata_text=""" La communication entre les jumeaux \n est basée sur le protocole Firmata.\n
|
||||||
# texte=serie_rcpt() \n -> Reçoit un message"""
|
broche = carte.get_pin('type:broche:mode') \n -> Créer une entrée/sortie (broche) \n - type : a (analogique) ou d (numérique) \n - mode : i (entrée) , o (sortie) ou p (pwm). \n
|
||||||
# card_serial_url=[["Liaison série : pySerial","https://pythonhosted.org/pyserial/"],
|
broche.read() \n -> Retourne la valeur de la broche.\n
|
||||||
# ["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
broche.write(valeur) \n -> Écrire la valeur sur la broche."""
|
||||||
# card_description.update({"serial-card" : [card_serial_title, card_serial_text, card_serial_url]})
|
card_firmata_url=[["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
||||||
|
system_card_description.update({"firmata-card" : [card_firmata_title, card_firmata_text, card_firmata_url]})
|
||||||
|
|
||||||
# Ouvrir et fermer
|
# Ouvrir et fermer
|
||||||
card_movement_title="Monter et descendre"
|
card_movement_title="Monter et descendre"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||||
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
||||||
import twin_serial # Liaison série
|
from twin_serial import jumeau, jumeau_stop, serial_close # Liaison série
|
||||||
import time
|
import time
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -16,9 +16,6 @@ import time
|
|||||||
# Récupérer la scène UPBGE
|
# Récupérer la scène UPBGE
|
||||||
scene = bge.logic.getCurrentScene()
|
scene = bge.logic.getCurrentScene()
|
||||||
|
|
||||||
# Récupérer le brochage du jumeau réel
|
|
||||||
from montchg import pin_config
|
|
||||||
|
|
||||||
# UPBGE constants
|
# UPBGE constants
|
||||||
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
|
||||||
@ -85,35 +82,6 @@ def ba_1 ():
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Jumeau
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
# Créer une broche
|
|
||||||
def jumeau_get_pin(board, name, brochage):
|
|
||||||
for pin in brochage :
|
|
||||||
if pin ==name:
|
|
||||||
# print (pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return board.get_pin(pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Activer le jumelage
|
|
||||||
def jumeau (brochage=None):
|
|
||||||
|
|
||||||
# Carte
|
|
||||||
board =twin_serial.open()
|
|
||||||
scene.objects['System']['board']=board
|
|
||||||
# print ("jumeau : ", scene.objects['System']['board'])
|
|
||||||
|
|
||||||
# Brochage
|
|
||||||
if brochage is not None:
|
|
||||||
for pin in pin_config :
|
|
||||||
scene.objects[pin_config[pin][1][0]][pin_config[pin][1][1]] = jumeau_get_pin(board, pin, brochage)
|
|
||||||
|
|
||||||
# Désactiver le jumelage
|
|
||||||
def jumeau_stop ():
|
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Cycle
|
# Cycle
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -125,14 +93,14 @@ def tempo (duree):
|
|||||||
# Arrêt
|
# Arrêt
|
||||||
def stop():
|
def stop():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_stop()
|
thread_cmd_stop()
|
||||||
|
|
||||||
# Fin naturelle
|
# Fin naturelle
|
||||||
def end():
|
def end():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_end()
|
thread_cmd_end()
|
||||||
|
|
||||||
|
Binary file not shown.
@ -77,6 +77,9 @@ def init(cont):
|
|||||||
|
|
||||||
system_init() # Initialisation du système
|
system_init() # Initialisation du système
|
||||||
|
|
||||||
|
def get_pin_config():
|
||||||
|
return pin_config
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Actionneurs
|
# Actionneurs
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -238,6 +241,7 @@ def ir_emet (cont):
|
|||||||
scene.objects['Recepteur IR']['activated'] = True
|
scene.objects['Recepteur IR']['activated'] = True
|
||||||
|
|
||||||
# Couleurs
|
# Couleurs
|
||||||
|
# FIXME : à faire
|
||||||
if obj['activated'] == True and obj.color !=color_activated:
|
if obj['activated'] == True and obj.color !=color_activated:
|
||||||
obj.color =color_activated
|
obj.color =color_activated
|
||||||
if obj['activated'] == False :
|
if obj['activated'] == False :
|
||||||
@ -248,6 +252,7 @@ def ir_emet (cont):
|
|||||||
|
|
||||||
##
|
##
|
||||||
# Récepteur IR
|
# Récepteur IR
|
||||||
|
# FIXME : Modele 3D -> Arduino à faire
|
||||||
##
|
##
|
||||||
|
|
||||||
def ir_recep (cont):
|
def ir_recep (cont):
|
||||||
@ -261,12 +266,13 @@ def ir_recep (cont):
|
|||||||
# Active
|
# Active
|
||||||
if obj['active']:
|
if obj['active']:
|
||||||
|
|
||||||
# Forçage (click)
|
# Forçage par clic
|
||||||
if obj['click'] == True:
|
if obj['click'] == True:
|
||||||
obj['activated'] = True
|
obj['activated'] = True
|
||||||
scene.objects['Emetteur IR']['activated'] = True
|
scene.objects['Emetteur IR']['activated'] = True
|
||||||
|
|
||||||
# Couleurs
|
# Couleurs
|
||||||
|
# FIXME : à faire
|
||||||
if obj['activated'] == True and obj.color !=color_activated:
|
if obj['activated'] == True and obj.color !=color_activated:
|
||||||
obj.color =color_activated
|
obj.color =color_activated
|
||||||
if obj['activated'] == False :
|
if obj['activated'] == False :
|
||||||
@ -332,4 +338,4 @@ def system_reset ():
|
|||||||
scene.objects['Emetteur IR']['active'] =False
|
scene.objects['Emetteur IR']['active'] =False
|
||||||
scene.objects['Recepteur IR']['activated'] =False
|
scene.objects['Recepteur IR']['activated'] =False
|
||||||
scene.objects['Recepteur IR']['active'] =False
|
scene.objects['Recepteur IR']['active'] =False
|
||||||
scene.objects['Recepteur IR']['activated_real'] =False
|
scene.objects['Recepteur IR']['activated_real'] =True # Absence d'obstacle -> True, présence d'obstacle -> False
|
||||||
|
@ -28,13 +28,13 @@ from porcou_lib import * # Bibliothèque portail coulissant
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Brochage du portail coulissant
|
# Brochage du portail coulissant (Grove)
|
||||||
brochage={
|
brochage={
|
||||||
'bp_ext' : 2,'bp_int' : 3,
|
'bp_ext' : ['a',0,'i'],'bp_int' : ['a',1,'i'],
|
||||||
'fdc_o' : 4,'fdc_f' : 5,
|
'fdc_o' : ['d',7,'i'],'fdc_f' : ['d',8,'i'],
|
||||||
'mot_o' : 6,'mot_f' : 7,
|
'mot_o' : ['d',5,'o'],'mot_f' : ['d',6,'o'],
|
||||||
'gyr' : 4,
|
'gyr' : ['d',4,'o'],
|
||||||
'ir_emet' : 9,'ir_recep' : 10}
|
'ir_emet' : ['d',2,'o'],'ir_recep' : ['a',3,'i']}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Fonctions
|
# Fonctions
|
||||||
@ -48,45 +48,14 @@ def commandes():
|
|||||||
|
|
||||||
jumeau(brochage)
|
jumeau(brochage)
|
||||||
|
|
||||||
# Mise en place : Fermeture
|
# Ecrire votre code ici ...
|
||||||
print ("Version sans sécurité : sans réouverture")
|
gyr(True) # Activer le gyrophare
|
||||||
print ("Mise en place : Fermeture")
|
|
||||||
while fdc_f() ==False :
|
|
||||||
gyr(True)
|
|
||||||
mot_o(False)
|
|
||||||
mot_f(True)
|
|
||||||
mot_f(False)
|
|
||||||
gyr(False)
|
|
||||||
|
|
||||||
# Fonctionnement normal
|
|
||||||
print ("Attente")
|
|
||||||
while True:
|
while True:
|
||||||
|
pass
|
||||||
# Ouverture
|
|
||||||
if bp_int() or bp_ext() :
|
|
||||||
print ("Ouverture")
|
|
||||||
while fdc_o() ==False:
|
|
||||||
gyr(True)
|
|
||||||
mot_f(False)
|
|
||||||
mot_o(True)
|
|
||||||
gyr(False)
|
|
||||||
mot_o(False)
|
|
||||||
|
|
||||||
print ("Temporisation")
|
|
||||||
tempo(2) # Temporisation
|
|
||||||
|
|
||||||
# Fermeture
|
|
||||||
print ("Fermeture")
|
|
||||||
while fdc_f() ==False:
|
|
||||||
gyr(True)
|
|
||||||
mot_o(False)
|
|
||||||
mot_f(True)
|
|
||||||
gyr(False)
|
|
||||||
mot_f(False)
|
|
||||||
print ("Attente")
|
|
||||||
|
|
||||||
fin() # A garder
|
fin() # A garder
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# En: External call << DONT CHANGE THIS SECTION >>
|
# En: External call << DONT CHANGE THIS SECTION >>
|
||||||
# Fr: Appel externe << NE PAS MODIFIER CETTE SECTION >>
|
# Fr: Appel externe << NE PAS MODIFIER CETTE SECTION >>
|
||||||
|
@ -13,27 +13,29 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
||||||
system_card=["twins-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
system_card=["twins-card", "firmata-card", "movement-card", "sensor-card", "gyro-card", "board-card", "model-card", "arduino-card"]
|
||||||
# system_card=["twins-card"]
|
|
||||||
system_card_description ={}
|
system_card_description ={}
|
||||||
|
|
||||||
# Jumeau numérique
|
# Jumeau numérique
|
||||||
# Message envoyé (asynchrone) : \n avancer : a, reculer : r, droite : d, \n gauche g, marquer : m et forer : f \n\n\n """
|
|
||||||
card_twins_title="Jumeau numérique"
|
card_twins_title="Jumeau numérique"
|
||||||
card_twins_text=""" jumeau() \n -> Active le jumeau réel.\n
|
card_twins_text=""" jumeau(brochage) \n -> Active le jumeau réel.\n
|
||||||
jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
jumeau_stop() \n -> Désactive le jumeau réel.\n
|
||||||
Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
Le brochage est un dictionnaire, par \n exemple : brochage={ "bouton": ['d',2,'i'], \n "led": ['d',3,'o'] }.\n
|
||||||
La vitesse par défaut est 115200 baud."""
|
Avec "carte=jumeau(brochage)", on peut \n utiliser l'objet "carte" pour communiquer \n directement avec le protocole Firmata."""
|
||||||
|
# jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
||||||
|
# Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
||||||
|
# La vitesse par défaut est 115200 baud."""
|
||||||
card_twins_url=[]
|
card_twins_url=[]
|
||||||
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
||||||
|
|
||||||
# Liaison série
|
# Firmata
|
||||||
# card_serial_title="Liaison série"
|
card_firmata_title="Protocole Firmata"
|
||||||
# card_serial_text=""" serie_msg(texte) \n -> Envoi un message \n
|
card_firmata_text=""" La communication entre les jumeaux \n est basée sur le protocole Firmata.\n
|
||||||
# texte=serie_rcpt() \n -> Reçoit un message"""
|
broche = carte.get_pin('type:broche:mode') \n -> Créer une entrée/sortie (broche) \n - type : a (analogique) ou d (numérique) \n - mode : i (entrée) , o (sortie) ou p (pwm). \n
|
||||||
# card_serial_url=[["Liaison série : pySerial","https://pythonhosted.org/pyserial/"],
|
broche.read() \n -> Retourne la valeur de la broche.\n
|
||||||
# ["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
broche.write(valeur) \n -> Écrire la valeur sur la broche."""
|
||||||
# card_description.update({"serial-card" : [card_serial_title, card_serial_text, card_serial_url]})
|
card_firmata_url=[["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
||||||
|
system_card_description.update({"firmata-card" : [card_firmata_title, card_firmata_text, card_firmata_url]})
|
||||||
|
|
||||||
# Ouvrir et fermer
|
# Ouvrir et fermer
|
||||||
card_movement_title="Ouvrir et fermer"
|
card_movement_title="Ouvrir et fermer"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||||
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
||||||
import twin_serial # Liaison série
|
from twin_serial import jumeau, jumeau_stop, serial_close # Liaison série
|
||||||
|
# import twin_serial # Liaison série
|
||||||
import time
|
import time
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -16,9 +17,6 @@ import time
|
|||||||
# Récupérer la scène UPBGE
|
# Récupérer la scène UPBGE
|
||||||
scene = bge.logic.getCurrentScene()
|
scene = bge.logic.getCurrentScene()
|
||||||
|
|
||||||
# Récupérer le brochage du jumeau réel
|
|
||||||
from porcou import pin_config
|
|
||||||
|
|
||||||
# UPBGE constants
|
# UPBGE constants
|
||||||
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
|
||||||
@ -68,6 +66,7 @@ def fdc_f ():
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
# Compte-rendu du capteur barrage IR
|
# Compte-rendu du capteur barrage IR
|
||||||
|
# Absence d'obstacle -> True, présence d'obstacle -> False
|
||||||
def ir_recep ():
|
def ir_recep ():
|
||||||
if scene.objects['Recepteur IR']['activated'] or scene.objects['Recepteur IR']['activated_real']==False:
|
if scene.objects['Recepteur IR']['activated'] or scene.objects['Recepteur IR']['activated_real']==False:
|
||||||
return False
|
return False
|
||||||
@ -92,35 +91,6 @@ def bp_int ():
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Jumeau
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
# Créer une broche
|
|
||||||
def jumeau_get_pin(board, name, brochage):
|
|
||||||
for pin in brochage :
|
|
||||||
if pin ==name:
|
|
||||||
# print (pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return board.get_pin(pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Activer le jumelage
|
|
||||||
def jumeau (brochage=None):
|
|
||||||
|
|
||||||
# Carte
|
|
||||||
board =twin_serial.open()
|
|
||||||
scene.objects['System']['board']=board
|
|
||||||
# print ("jumeau : ", scene.objects['System']['board'])
|
|
||||||
|
|
||||||
# Brochage
|
|
||||||
if brochage is not None:
|
|
||||||
for pin in pin_config :
|
|
||||||
scene.objects[pin_config[pin][1][0]][pin_config[pin][1][1]] = jumeau_get_pin(board, pin, brochage)
|
|
||||||
|
|
||||||
# Désactiver le jumelage
|
|
||||||
def jumeau_stop ():
|
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Cycle
|
# Cycle
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -132,14 +102,14 @@ def tempo (duree):
|
|||||||
# Arrêt
|
# Arrêt
|
||||||
def stop():
|
def stop():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_stop()
|
thread_cmd_stop()
|
||||||
|
|
||||||
# Fin naturelle
|
# Fin naturelle
|
||||||
def end():
|
def end():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_end()
|
thread_cmd_end()
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<data>
|
<data>
|
||||||
<screen>
|
<screen>
|
||||||
<width>1609</width>
|
<width>1325</width>
|
||||||
<height>905</height>
|
<height>745</height>
|
||||||
<quality>1</quality>
|
<quality>1</quality>
|
||||||
</screen>
|
</screen>
|
||||||
</data>
|
</data>
|
@ -79,9 +79,9 @@ card_description.update({"loop-card" : [card_loop_title, card_loop_text, card_lo
|
|||||||
# Flux
|
# Flux
|
||||||
card_flow_title="Contrôle du flux"
|
card_flow_title="Contrôle du flux"
|
||||||
card_flow_text=""" Les structures (if, while, for) peuvent \n être gérées plus finement par les \n fonctions "break", "continue" et "pass". \n
|
card_flow_text=""" Les structures (if, while, for) peuvent \n être gérées plus finement par les \n fonctions "break", "continue" et "pass". \n
|
||||||
- "break" : termine l'itération en cours et \n arrête la boucle.
|
- break : termine l'itération en cours et \n arrête la boucle.
|
||||||
- "continue" : termine l'itération en cours \n et reprend la boucle.
|
- continue : termine l'itération en cours \n et reprend la boucle.
|
||||||
- "pass" : instruction vide."""
|
- pass : instruction vide."""
|
||||||
card_flow_url=[["w3schools.com : break","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
card_flow_url=[["w3schools.com : break","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
||||||
["w3schools.com : continue","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
["w3schools.com : continue","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
||||||
["w3schools.com : pass","https://www.w3schools.com/python/ref_keyword_pass.asp"]]
|
["w3schools.com : pass","https://www.w3schools.com/python/ref_keyword_pass.asp"]]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import importlib
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import serial # Liaison série
|
import serial # Liaison série
|
||||||
@ -19,6 +20,14 @@ from serial.tools.list_ports import comports # Détection du port automatique
|
|||||||
# UPBGE scene
|
# UPBGE scene
|
||||||
scene = bge.logic.getCurrentScene()
|
scene = bge.logic.getCurrentScene()
|
||||||
|
|
||||||
|
# Récupérer le brochage du jumeau réel
|
||||||
|
system=importlib.import_module(scene.objects['Doc']['system']) # Système
|
||||||
|
pin_config = system.get_pin_config()
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Liaison série
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
##
|
##
|
||||||
# Recherche automatique du port
|
# Recherche automatique du port
|
||||||
##
|
##
|
||||||
@ -79,7 +88,7 @@ def devices():
|
|||||||
# pyfirmata : baudrate=57600
|
# pyfirmata : baudrate=57600
|
||||||
##
|
##
|
||||||
|
|
||||||
def open():
|
def serial_open():
|
||||||
|
|
||||||
# UI : étape 1
|
# UI : étape 1
|
||||||
scene.objects['Twins-text']['Text'] = "Connection en cours ..."
|
scene.objects['Twins-text']['Text'] = "Connection en cours ..."
|
||||||
@ -116,7 +125,7 @@ def open():
|
|||||||
# Fermeture de la communication série
|
# Fermeture de la communication série
|
||||||
##
|
##
|
||||||
|
|
||||||
def close(board):
|
def serial_close(board):
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
scene.objects['Twins-text']['Text'] = "Connection fermée."
|
scene.objects['Twins-text']['Text'] = "Connection fermée."
|
||||||
board.exit() # Fermer proprement la communication avec la carte
|
board.exit() # Fermer proprement la communication avec la carte
|
||||||
@ -145,6 +154,43 @@ def config(port, speed):
|
|||||||
# serial_msg5 = "FC\n"
|
# serial_msg5 = "FC\n"
|
||||||
# twins_serial.write(serial_msg5.encode())
|
# twins_serial.write(serial_msg5.encode())
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Jumeau
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
# Créer une broche
|
||||||
|
def jumeau_get_pin(board, name, brochage):
|
||||||
|
for pin in brochage :
|
||||||
|
if pin ==name:
|
||||||
|
# print (pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
||||||
|
# return board.get_pin(pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
||||||
|
return board.get_pin(brochage[pin][0]+':'+str(brochage[pin][1])+':'+brochage[pin][2])
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Activer le jumelage
|
||||||
|
def jumeau (brochage=None):
|
||||||
|
|
||||||
|
# Carte
|
||||||
|
board =serial_open()
|
||||||
|
scene.objects['System']['board']=board
|
||||||
|
# print ("jumeau : ", scene.objects['System']['board'])
|
||||||
|
|
||||||
|
# Brochage
|
||||||
|
if brochage is not None:
|
||||||
|
for pin in pin_config :
|
||||||
|
scene.objects[pin_config[pin][1][0]][pin_config[pin][1][1]] = jumeau_get_pin(board, pin, brochage)
|
||||||
|
return board
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Désactiver le jumelage
|
||||||
|
def jumeau_stop ():
|
||||||
|
serial_close(scene.objects['System']['board'])
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Message
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
##
|
##
|
||||||
# Envoi d'un message vers la communication série
|
# Envoi d'un message vers la communication série
|
||||||
# FIXME : plus tard
|
# FIXME : plus tard
|
||||||
|
Binary file not shown.
@ -70,6 +70,9 @@ def init(cont):
|
|||||||
|
|
||||||
system_init() # Initialisation du système
|
system_init() # Initialisation du système
|
||||||
|
|
||||||
|
def get_pin_config():
|
||||||
|
return pin_config
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Actionneurs
|
# Actionneurs
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -346,7 +349,6 @@ def system_init ():
|
|||||||
scene.objects['Led moteur-on'].setVisible(False,False)
|
scene.objects['Led moteur-on'].setVisible(False,False)
|
||||||
scene.objects['Led alimentation'].setVisible(True,False)
|
scene.objects['Led alimentation'].setVisible(True,False)
|
||||||
scene.objects['Led alimentation-on'].setVisible(False,False)
|
scene.objects['Led alimentation-on'].setVisible(False,False)
|
||||||
|
|
||||||
system_reset()
|
system_reset()
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -31,14 +31,12 @@ from volrou_lib import * # Bibliothèque volet roulant
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Brochage du volet roulant
|
# Brochage du volet roulant (Grove)
|
||||||
# brochage={
|
brochage={
|
||||||
# 'fdc_h' : 2,'fdc_b' : 3,
|
'fdc_h' : ['d',7,'i'],'fdc_b' : ['d',8,'i'],
|
||||||
# 'bp_m' : 4,'bp_d' : 5, 'bp_a' : 6,
|
'bp_m' : ['a',0,'i'],'bp_d' : ['a',1,'i'], 'bp_a' : ['d',2,'i'],
|
||||||
# 'mot_m' : 7,'mot_d' : 8,
|
'mot_m' : ['d',5,'o'],'mot_d' : ['d',6,'o'],
|
||||||
# 'bp_auto' : 9, 'voy_auto' : 10, 'lum' : 11}
|
'bp_auto' : ['a',3,'i'], 'voy_auto' : ['d',4,'o'], 'lum' : ['a',2,'i']}
|
||||||
|
|
||||||
brochage={'voy_auto' : 4}
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Fonctions
|
# Fonctions
|
||||||
|
@ -13,26 +13,29 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "board-card", "model-card", "arduino-card"]
|
# system_card=["twins-card", "serial-card", "movement-card", "sensor-card", "board-card", "model-card", "arduino-card"]
|
||||||
system_card=["twins-card", "movement-card", "sensor-card", "board-card", "model-card", "arduino-card"]
|
system_card=["twins-card", "firmata-card", "movement-card", "sensor-card", "board-card", "model-card", "arduino-card"]
|
||||||
system_card_description ={}
|
system_card_description ={}
|
||||||
|
|
||||||
# Jumeau numérique
|
# Jumeau numérique
|
||||||
# Message envoyé (asynchrone) : \n avancer : a, reculer : r, droite : d, \n gauche g, marquer : m et forer : f \n\n\n """
|
|
||||||
card_twins_title="Jumeau numérique"
|
card_twins_title="Jumeau numérique"
|
||||||
card_twins_text=""" jumeau() \n -> Active le jumeau réel.\n
|
card_twins_text=""" jumeau(brochage) \n -> Active le jumeau réel.\n
|
||||||
jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
jumeau_stop() \n -> Désactive le jumeau réel.\n
|
||||||
Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
Le brochage est un dictionnaire, par \n exemple : brochage={ "bouton": ['d',2,'i'], \n "led": ['d',3,'o'] }.\n
|
||||||
La vitesse par défaut est 115200 baud."""
|
Avec "carte=jumeau(brochage)", on peut \n utiliser l'objet "carte" pour communiquer \n directement avec le protocole Firmata."""
|
||||||
|
# jumeau_config(port, vitesse) \n -> Définit la configuration de la liaison \n série.\n
|
||||||
|
# Si le port n'est pas spécifié, il sera \n recherché automatiquement (carte \n Arduino Uno ou Mega). \n
|
||||||
|
# La vitesse par défaut est 115200 baud."""
|
||||||
card_twins_url=[]
|
card_twins_url=[]
|
||||||
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
system_card_description.update({"twins-card" : [card_twins_title, card_twins_text, card_twins_url]})
|
||||||
|
|
||||||
# Liaison série
|
# Firmata
|
||||||
# card_serial_title="Liaison série"
|
card_firmata_title="Protocole Firmata"
|
||||||
# card_serial_text=""" serie_msg(texte) \n -> Envoi un message \n
|
card_firmata_text=""" La communication entre les jumeaux \n est basée sur le protocole Firmata.\n
|
||||||
# texte=serie_rcpt() \n -> Reçoit un message"""
|
broche = carte.get_pin('type:broche:mode') \n -> Créer une entrée/sortie (broche) \n - type : a (analogique) ou d (numérique) \n - mode : i (entrée) , o (sortie) ou p (pwm). \n
|
||||||
# card_serial_url=[["Liaison série : pySerial","https://pythonhosted.org/pyserial/"],
|
broche.read() \n -> Retourne la valeur de la broche.\n
|
||||||
# ["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
broche.write(valeur) \n -> Écrire la valeur sur la broche."""
|
||||||
# card_description.update({"serial-card" : [card_serial_title, card_serial_text, card_serial_url]})
|
card_firmata_url=[["Protocole Firmata : pyFirmata","https://github.com/tino/pyFirmata"]]
|
||||||
|
system_card_description.update({"firmata-card" : [card_firmata_title, card_firmata_text, card_firmata_url]})
|
||||||
|
|
||||||
# Ouvrir et fermer
|
# Ouvrir et fermer
|
||||||
card_movement_title="Monter et descendre"
|
card_movement_title="Monter et descendre"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||||
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
from twin_threading import thread_cmd_start, thread_cmd_stop, thread_cmd_end # Multithreading
|
||||||
import twin_serial # Liaison série
|
from twin_serial import jumeau, jumeau_stop, serial_close # Liaison série
|
||||||
import time
|
import time
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -16,9 +16,6 @@ import time
|
|||||||
# Récupérer la scène UPBGE
|
# Récupérer la scène UPBGE
|
||||||
scene = bge.logic.getCurrentScene()
|
scene = bge.logic.getCurrentScene()
|
||||||
|
|
||||||
# Récupérer le brochage du jumeau réel
|
|
||||||
from volrou import pin_config
|
|
||||||
|
|
||||||
# UPBGE constants
|
# UPBGE constants
|
||||||
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
|
||||||
@ -97,35 +94,6 @@ def bp_d ():
|
|||||||
def bp_auto ():
|
def bp_auto ():
|
||||||
return scene.objects['Bp auto']['activated']
|
return scene.objects['Bp auto']['activated']
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Jumeau
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
# Créer une broche
|
|
||||||
def jumeau_get_pin(board, name, brochage):
|
|
||||||
for pin in brochage :
|
|
||||||
if pin ==name:
|
|
||||||
# print (pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return board.get_pin(pin_config[pin][0][0]+':'+str(brochage[pin])+':'+pin_config[pin][0][1])
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Activer le jumelage
|
|
||||||
def jumeau (brochage=None):
|
|
||||||
|
|
||||||
# Carte
|
|
||||||
board =twin_serial.open()
|
|
||||||
scene.objects['System']['board']=board
|
|
||||||
# print ("jumeau : ", scene.objects['System']['board'])
|
|
||||||
|
|
||||||
# Brochage
|
|
||||||
if brochage is not None:
|
|
||||||
for pin in pin_config :
|
|
||||||
scene.objects[pin_config[pin][1][0]][pin_config[pin][1][1]] = jumeau_get_pin(board, pin, brochage)
|
|
||||||
|
|
||||||
# Désactiver le jumelage
|
|
||||||
def jumeau_stop ():
|
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Cycle
|
# Cycle
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -137,14 +105,14 @@ def tempo (duree):
|
|||||||
# Arrêt
|
# Arrêt
|
||||||
def stop():
|
def stop():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_stop()
|
thread_cmd_stop()
|
||||||
|
|
||||||
# Fin naturelle
|
# Fin naturelle
|
||||||
def end():
|
def end():
|
||||||
if scene.objects['System']['twins']:
|
if scene.objects['System']['twins']:
|
||||||
twin_serial.close(scene.objects['System']['board'])
|
serial_close(scene.objects['System']['board'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
thread_cmd_end()
|
thread_cmd_end()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user