mirror of
https://forge.apps.education.fr/blender-edutech/blender-edutech-tutoriels.git
synced 2024-01-27 09:42:33 +01:00
Tutoriel 3 : ajout de la détection automatique de la carte
This commit is contained in:
parent
a446e809b3
commit
5881797357
Binary file not shown.
Binary file not shown.
@ -1,7 +1,6 @@
|
|||||||
import bge # Bibliothèque Blender Game Engine (BGE)
|
import bge # Bibliothèque Blender Game Engine (BGE)
|
||||||
import pyfirmata # Protocole Firmata
|
import pyfirmata # Protocole Firmata
|
||||||
import serial # Liaison série
|
import labyrinthe_carte # Liaison série avec la carte
|
||||||
from serial.tools.list_ports import comports # Détection du port automatique
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# 3-labyrinthe.py
|
# 3-labyrinthe.py
|
||||||
@ -21,20 +20,20 @@ scene = bge.logic.getCurrentScene()
|
|||||||
# print("Objets de la scene : ", scene.objects) # Lister les objets de la scène
|
# print("Objets de la scene : ", scene.objects) # Lister les objets de la scène
|
||||||
|
|
||||||
# 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
|
||||||
ACTIVATE = bge.logic.KX_INPUT_ACTIVE
|
ACTIVATE = bge.logic.KX_INPUT_ACTIVE
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Communication avec la carte Arduino
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
# carte = pyfirmata.Arduino('COM4') # Windows
|
# carte = pyfirmata.Arduino('COM4') # Windows
|
||||||
carte = pyfirmata.Arduino('/dev/ttyACM0') # GNU/Linux
|
# carte = pyfirmata.Arduino('/dev/ttyACM0') # GNU/Linux
|
||||||
print("Communication Carte Arduino établie")
|
# print("Communication Carte Arduino établie")
|
||||||
|
|
||||||
# Itérateur pour les entrees
|
# Détection de la carte avec la protocol Firmata
|
||||||
|
carte = labyrinthe_carte.init_firmata()
|
||||||
|
if carte is None:
|
||||||
|
bge.logic.endGame()
|
||||||
|
|
||||||
|
# Itérateur pour les entrées
|
||||||
it = pyfirmata.util.Iterator(carte)
|
it = pyfirmata.util.Iterator(carte)
|
||||||
it.start()
|
it.start()
|
||||||
|
|
||||||
@ -77,14 +76,16 @@ def manette(cont):
|
|||||||
# Joystick : axe X
|
# Joystick : axe X
|
||||||
# de 0,25 à 0,75 avec une zone morte entre 0,48 et 0,52
|
# de 0,25 à 0,75 avec une zone morte entre 0,48 et 0,52
|
||||||
# print (jstk_x.read(), jstk_y.read())
|
# print (jstk_x.read(), jstk_y.read())
|
||||||
if jstk_x.read() <0.48 or jstk_x.read() >0.52:
|
if jstk_x.read() is not None:
|
||||||
resolution_prop= (jstk_x.read()-0.5)*(resolution/0.25)
|
if jstk_x.read() <0.48 or jstk_x.read() >0.52:
|
||||||
obj.applyRotation((resolution_prop, 0, -obj.worldOrientation.to_euler().z), False)
|
resolution_prop= (jstk_x.read()-0.5)*(resolution/0.25)
|
||||||
|
obj.applyRotation((resolution_prop, 0, -obj.worldOrientation.to_euler().z), False)
|
||||||
|
|
||||||
# Joystick : axe Y
|
# Joystick : axe Y
|
||||||
if jstk_y.read() <0.48 or jstk_y.read() >0.52:
|
if jstk_y.read() is not None:
|
||||||
resolution_prop= (jstk_y.read()-0.5)*(resolution/0.25)
|
if jstk_y.read() <0.48 or jstk_y.read() >0.52:
|
||||||
obj.applyRotation((0, resolution_prop, -obj.worldOrientation.to_euler().z), False)
|
resolution_prop= (jstk_y.read()-0.5)*(resolution/0.25)
|
||||||
|
obj.applyRotation((0, resolution_prop, -obj.worldOrientation.to_euler().z), False)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Gestion du clavier
|
# Gestion du clavier
|
||||||
@ -96,6 +97,7 @@ def clavier(cont):
|
|||||||
# obj = scene.objects['Plateau']
|
# obj = scene.objects['Plateau']
|
||||||
keyboard = bge.logic.keyboard
|
keyboard = bge.logic.keyboard
|
||||||
resolution = 0.01
|
resolution = 0.01
|
||||||
|
global carte
|
||||||
|
|
||||||
# Touche ESC -> Quitter
|
# Touche ESC -> Quitter
|
||||||
if keyboard.inputs[bge.events.ESCKEY].status[0] == ACTIVATE:
|
if keyboard.inputs[bge.events.ESCKEY].status[0] == ACTIVATE:
|
||||||
|
68
labyrinthe/3-arduino_pyfirmata/labyrinthe_carte.py
Normal file
68
labyrinthe/3-arduino_pyfirmata/labyrinthe_carte.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import pyfirmata # Protocole Firmata
|
||||||
|
import serial # Liaison série
|
||||||
|
from serial.tools.list_ports import comports # Détection du port automatique
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# labyrinthe_carte.py
|
||||||
|
# @title: Détection automatique de la carte Arduino ou microbit
|
||||||
|
# @project: Blender-EduTech - Tutoriels 3, 4 et 5 : Labyrinthe à bille - Interfacer avec une carte Arduino/microbit
|
||||||
|
# @lang: fr
|
||||||
|
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||||
|
# @copyright: Copyright (C) 2023 Philippe Roy
|
||||||
|
# @license: GNU GPL
|
||||||
|
#
|
||||||
|
# Détection automatique de la carte Arduino ou microbit
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Communication avec la carte Arduino
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
# Recherche automatique du port (Arduino Uno et Arduino Mega)
|
||||||
|
def autoget_port():
|
||||||
|
# USB Vendor ID, USB Product ID
|
||||||
|
carte_dict={'microbit' :[3368, 516],
|
||||||
|
'uno' :[9025, 67],
|
||||||
|
'mega' :[9025, 66]}
|
||||||
|
for com in comports(): # micro:bit
|
||||||
|
if com.vid == carte_dict["microbit"][0] and com.pid == carte_dict["microbit"][1]:
|
||||||
|
return [com.device,"micro:bit"]
|
||||||
|
for com in comports(): # Arduino Uno
|
||||||
|
if com.vid == carte_dict["uno"][0] and com.pid == carte_dict["uno"][1]:
|
||||||
|
return [com.device,"Arduino Uno"]
|
||||||
|
for com in comports(): # Arduino Mega
|
||||||
|
if com.vid == carte_dict["mega"][0] and com.pid == carte_dict["mega"][1]:
|
||||||
|
return [com.device,"Arduino Mega"]
|
||||||
|
return [None,""]
|
||||||
|
|
||||||
|
# Etablir la communication avec la carte avec le protocol Firmata
|
||||||
|
def init_firmata():
|
||||||
|
[port, carte_name] =autoget_port()
|
||||||
|
if port is None:
|
||||||
|
print("Communication avec Carte Arduino impossible")
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
carte = pyfirmata.Arduino(port)
|
||||||
|
print("Communication avec Carte Arduino établie sur "+port+" avec le protocole Firmata")
|
||||||
|
return carte
|
||||||
|
except:
|
||||||
|
print("Communication avec Carte Arduino impossible")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# Etablir la communication avec la carte avec la liaison série avec une vitesse
|
||||||
|
def init_serial(speed=115200):
|
||||||
|
[port, carte_name] =autoget_port()
|
||||||
|
if port is None:
|
||||||
|
print("Communication avec Carte Arduino/microbit impossible")
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
carte = serial.Serial(port,speed)
|
||||||
|
print("Communication avec Carte Arduino/microbit établie sur "+port+" à la vitesse "+speed+"bauds")
|
||||||
|
return carte
|
||||||
|
except:
|
||||||
|
print("Communication avec Carte Arduino/microbit impossible")
|
||||||
|
return None
|
Loading…
Reference in New Issue
Block a user