2023-04-29 10:53:59 +02:00
|
|
|
import pyfirmata # Communication carte
|
|
|
|
import time
|
|
|
|
import signal # Interruptions systeme
|
|
|
|
import sys
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# manette-test.py :
|
|
|
|
# @title: Test de la manette 4 boutons et joystick (protocol Firmata)
|
|
|
|
# @project: Blender-EduTech - Tutoriel : Tutoriel 3 Labyrinthe à bille - Interfacer la scène 3D avec une carte Arduino
|
|
|
|
# @lang: fr
|
|
|
|
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
|
|
|
# @copyright: Copyright (C) 2023 Philippe Roy
|
|
|
|
# @license: GNU GPL
|
|
|
|
#
|
|
|
|
# Commandes simples avec une manette 4 boutons et un joystick
|
|
|
|
#
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Communication avec la carte Arduino
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# carte = pyfirmata.Arduino('COM4') # Windows
|
|
|
|
carte = pyfirmata.Arduino('/dev/ttyACM0') # GNU/Linux
|
|
|
|
print("Communication Carte Arduino établie")
|
|
|
|
|
2023-05-03 03:42:35 +02:00
|
|
|
# Itérateur pour les entrees
|
2023-04-29 10:53:59 +02:00
|
|
|
it = pyfirmata.util.Iterator(carte)
|
|
|
|
it.start()
|
|
|
|
|
|
|
|
# Fermer proprement la communication avec la carte Arduino lors de l'arret du programme
|
|
|
|
def sigint_handler(signal, frame):
|
|
|
|
print ('Interruption du programme capturée.')
|
|
|
|
carte.exit()
|
|
|
|
time.sleep(1)
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
###############################################################################
|
2023-05-03 03:42:35 +02:00
|
|
|
# Définition entrées - sorties
|
2023-04-29 10:53:59 +02:00
|
|
|
###############################################################################
|
|
|
|
|
2023-05-03 03:42:35 +02:00
|
|
|
# Définition des 4 boutons
|
2023-04-29 10:53:59 +02:00
|
|
|
bt_a = carte.get_pin('d:2:i')
|
|
|
|
bt_r = carte.get_pin('d:3:i')
|
|
|
|
bt_g = carte.get_pin('d:4:i')
|
|
|
|
bt_d = carte.get_pin('d:5:i')
|
|
|
|
|
2023-05-03 03:42:35 +02:00
|
|
|
# Définition du joystick
|
|
|
|
jstk_x = carte.get_pin('a:0:i')
|
|
|
|
jstk_y = carte.get_pin('a:1:i')
|
|
|
|
|
2023-04-29 10:53:59 +02:00
|
|
|
# led = carte.get_pin('d:13:o')
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Boucle principale
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
|
|
|
##
|
|
|
|
# 4 boutons
|
|
|
|
##
|
|
|
|
|
|
|
|
if bt_a.read() == True and bt_r.read() == False:
|
|
|
|
print("Bouton haut")
|
|
|
|
if bt_a.read() == False and bt_r.read() == True:
|
|
|
|
print("Bouton bas")
|
|
|
|
if bt_g.read() == True and bt_d.read() == False:
|
|
|
|
print("Bouton gauche")
|
|
|
|
if bt_g.read() == False and bt_d.read() == True :
|
|
|
|
print("Bouton droit")
|
|
|
|
|
2023-05-03 03:42:35 +02:00
|
|
|
##
|
|
|
|
# Joystick
|
|
|
|
##
|
|
|
|
|
|
|
|
print("Joystick X : ", jstk_x.read())
|
|
|
|
print("Joystick Y : ", jstk_y.read())
|
|
|
|
|
2023-04-29 10:53:59 +02:00
|
|
|
##
|
|
|
|
# Cadencement
|
|
|
|
##
|
|
|
|
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
|
|
|
##
|
|
|
|
# Capture de l'interruption du programme
|
|
|
|
##
|
|
|
|
|
|
|
|
signal.signal(signal.SIGINT, sigint_handler)
|