En lisant ton programme au post #1 je pensais que ton clavier était composé de touches connectées à la masse.
Ton schéma montre un clavier matriciel mais la gestion que tu fais n'est pas du tout adaptée. Il faut utiliser comme le préconise hbachetti la librairie keypad qui balayera le clavier et fournira directement un code de touche lors d'un appui.
J'ai suivi vos conseils en utilisant la librairie Keypad.
Tout fonctionne parfaitement
Il me reste à configurer le module Bluetooth HC06 sur la Raspberry.
J'ai installé la carte HC-06 sur mon arduino pro micro.
J'arrive à appairer la carte sur mon PC Windows 10, le logiciel Arduino via le moniteur série, lit bien les données lorsque je presse mes boutons poussoirs.
En revanche, sur le raspberry, je m'arrache les cheveux ^^
Il y a des tonnes de package, j'arrive à me connecter sur le HC-06 mais impossible de lire les données quand je presse les boutons poussoirs.
Les données à lire sont simplement 1 chiffre ou 1 lettre.
Il semblerait qu'il faut utiliser un programme python qui puisse "écouter". J'ai essayé pas mal de chose dont du RFCOMM mais rien à faire.
Je travaille depuis des années avec pyserial.
C'est super-portable et très bien fait. le mec qui a pondu ça est un pro de la ligne série sous WIndows et LINUX.
Tu changes d'OS en modifiant le device : "COM1" sous Windows ou "/dev/ttyS0" ou "/dev/ttyUSB0" sous LINUX et ça roule.
Bien entendu cela tourne sur RASPBERRY, en USB.
Je ne parviens pas à faire ce que je veux à savoir que lorsque je presse un bouton poussoir, cela doit écrire un caractère dans le Terminal de Raspbian.
Après lecture de nombreux posts, il semblerait que c'est parce que mon module bluetooth HC-06 ne gère pas le HID.
Est-ce que python est capable d'exécuter un ordre lorsqu'il comprend que mon bouton poussoir est enclenché ?
En clair :
1- J'appuie sur l'un des 17 boutons poussoirs de mon boîtier
2- python lit la valeur que renvoie l'atmega32u4
3- Il lance une commande dans la console.
Est-ce que python est capable d'exécuter un ordre lorsqu'il comprend que mon bouton poussoir est enclenché ?
Il y a quelque chose à faire en écrivant un programme Python utlisant Pyserial (comme cela a déjà été écrit plusieurs fois au dessus) pour réceptionner les données puis lancer la ou les commandes correspondantes.
Par analogie avec Arduino disons que Pyserial est une librairie qui permet de gérer en Python les ports séries
Le HC06 ne peut être vu par le système d'exploitation que comme un port série virtuel et non comme un clavier BT.
J'ai essayé de coder un petit script avec la fonction print de Pyserial.
Pyserial m'affiche bien les valeurs qui peuvent aller de 1 à 9 et de a à k quand je presse le bouton poussoir.
En revanche, ma condition (si touche 1 est pressé, alors faire ceci) ne fonctionne pas. Je colle mon code, auriez vous une suggestion à faire svp ?
import serial
ser = serial.Serial('/dev/rfcomm0', 9600)
while 1:
bouton = ser.readline()
print('bouton')
if bouton == b : print('bouton')
Le premier print('bouton') dans le code sert juste de témoin quand je presse le bouton. Cette ligne de code sera effacée quand j'aurai pu mettre en place la condition.
Voyez vous des choses qui ne vont pas avec la condition ? Car la dernière ligne de code ne fonctionne pas.
Un petit up.
Je progresse à petit pas, mais je suis confronté à un nouveau problème.
Le code suivant :
if result == '4' : os.system("omxplayer -o local /home/pi/Videos/merci.mp4")
if result == 'c' : os.system("sudo pkill omxplayer")
La vidéo se lance bien quand j'appuie sur le bouton 4.
Si je souhaite l'arrêter, j'appuie sur le bouton C.
Mais comme la vidéo est au premier plan, pyserial n'écoute plus quand je presse le bouton poussoir.
Existe t-il un moyen pour que pyserial continue d'écouter, même lorsqu'il y a une vidéo en cours d'exécution ?
while True:
result = ser.read()
print(result)
if result == '4' : os.system("omxplayer -o local /home/pi/Videos/merci.mp4")
if result == 'c' : os.system("sudo pkill omxplayer")
Avec ce script, pyserial ne lit pas les instructions en arrière plan.
Auriez vous une piste ?