Extension de clavier et communication

Bonjour !
J'essaie de concevoir une sorte de clavier complémentaire, c'est-à-dire concrètement une plaque avec de 6 à 10 boutons physiques, et qui envoient une information à l'ordinateur (ex : bouton x pressé, bouton x relâché)
Ce "clavier" se branchera en usb dans l'ordinateur, et ira de pair avec un logiciel (C++).
Concrètement le but est de servir pour des raccourcis dans le logiciel, mais de manière physique car le logiciel tournera en arrière plan, et que c'est plus pratique que le ALT + TAB incessant xD
Côté électronique, c'est bon, pour le moment les tests se font avec seulement 6 boutons, le programme de l'arduino détecte bien l'appui sur un bouton et renvoie le numéro du bouton correspondant. (Je joindrais le schémas et le code demain, car je n'ai pas de pc sous la main...)
Ma question est donc la suivante : Comment communiquer avec l'ordinateur (plus précisément le logiciel) sans utiliser de mode de communication qui pourrait provoquer des interférences avec d'autres logiciels/actions en cours (ex: ne pas simuler l'appui sur une touche de clavier,...)
Derniers petits détails :

  • il est très important de détecter si le bouton reste appuyé, car l'utilité de ce clavier est comparable à un push to talk
  • il n'est pas prévu que deux boutons soient appuyés en même temps, si c'est le cas, celui appuyé en premier sera pris en compte et les autres ignorés.

Merci d'avoir lu ce loong topic et d'avance pour votre aide :slight_smile:
N.H.Y

Utilisez un arduino capable d’emuler Un clavier en USB (HID)

Pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau

Bonsoir,
Merci pour votre réponse rapide !
Cependant, je préfère ne pas simuler de clavier, pour commencer car j'ai aussi un clavier, qui me permettrait directement d'appuyer sur la touche voulue, et deuxièmement car tout se passe en arrière plan, l'action doit restée "invisible" pour l'utilisateur. Si des lettres commencent à apparaître a l'écran ou que le curseur se déplace, le raccourci n'a plus d'intérêt...
D'autres idées ? :slight_smile:
Par contre merci beaucoup pour la bibliothèque de gestion de boutons, je sens que ca va m'être utile :slight_smile:

Bonjour

Pour moi il y a quelquechose de contradictoire dans la demande.

Je ne vois pas de solution autre que la création d'un claivier secondaire ("extension de clavier') envoyant au système d'exploitation des groupes d'octets interprétés par l'ordinateur comme des séquences de touches
C'est transparent pour l'utilisateur , comme l'ajout d'un pavé numérique USB.

Une carte Arduino dotée d'un ATMega 32u4 (Leonardo....) se prète tout à fait à ce travail comme signalé au dessus.

Pour faire autrement il me semble qu'il faudrait transformer le code de l'application qui tourne sur le PC

Sinon vous communiquez sur le port série et auquel cas vous devez écouter le bon port série dans votre application dédiée, interpréter le flot de données et agir en conséquence

ça ne fonctionnera bien sûr que dans VOTRE application spécifique

car tout se passe en arrière plan, l'action doit restée "invisible" pour l'utilisateur.

Une appli en arrière-plan ne lit pas le clavier.
Il n'y a pas d'autre issue que de développer une appli dédiée sur le PC, qui reçoit les caractères sur le port série. L'ARDUINO doit donc écrire les codes des boutons sur Serial.

Concrètement le but est de servir pour des raccourcis dans le logiciel, mais de manière physique car le logiciel tournera en arrière plan, et que c'est plus pratique que le ALT + TAB incessant xD

Pas très précis. Quel est exactement le but recherché ? Quel est l'OS ?

Comment communiquer avec l'ordinateur (plus précisément le logiciel) sans utiliser de mode de communication qui pourrait provoquer des interférences avec d'autres logiciels/actions en cours (ex: ne pas simuler l'appui sur une touche de clavier,...)

S'il y a une appli sur le PC qui se charge de lire les codes du "clavier" sur un port USB, il n'y a pas de raison qu'il y ait un effet sur les applis en avant plan.

@hbachetti

Moi j’ai compris en lisant

Ce "clavier" se branchera en usb dans l'ordinateur, et ira de pair avec un logiciel (C++).

qu’il développait aussi le logiciel PC en question, donc la lecture du port série effectivement est une option, une autre serait par liaison UDP/IP (donc pas besoin d’attacher physiquement l’arduino au PC)

Oui je pense aussi puisqu'il parle de C++.
Le point que j'aimerais éclaircir est :

c'est plus pratique que le ALT + TAB incessant

J’ai lu cela sous la forme: s’il utilise un clavier il faut que son app soit au premier plan pour recevoir les events et donc alt-tab pour la mettre devant, appuyer sur son clavier bricolé, puis alt-tab pour retourner à son autre app je suppose. Pour parler à une app en arrière plan effectivement il faut plus qu’un simple clavier émulé ou pas

Wait and see ...

Quel est exactement le but recherché ? Quel est l'OS ?

OS : Windows 10.
Pour le but, prenons comme exemple que je suis en train d'utiliser un jeu et que la touche IMPR_ecran n'ai jamais existé. Le but est qu'en appuyant sur un bouton de l'arduino, l'arduino envoie un signal a mon logiciel qui tourne en arrière plan, le logiciel comprend que c'est le bouton n°1, et effectue l'action qui lui est associée (ici prendre un screenshot par exemple)

qu'il développait aussi le logiciel PC en question, donc la lecture du port série effectivement est une option, une autre serait par liaison UDP/IP (donc pas besoin d'attacher physiquement l'arduino au PC)

En effet, c'est moi qui développe le logiciel, donc pas de restriction sur les méthodes de communication.
Cependant, quoi qu'il arrive, comme l’Arduino devra être alimenté, et que je veux pas de batterie, il sera branché, donc autant que ce soit en USB et que ça serve pour la communication... (donc pas UDP/IP, mais merci pour l'idée :slight_smile:

Le point que j'aimerais éclaircir est : c'est plus pratique que le ALT + TAB incessant

Reprenons l'exemple du screenshot, il faudait que j'ai un logiciel de screenshot ouvert et que je fasse alt tab a chaque fois que je voudrait en prendre un...

En effet, le terme de clavier dans le titre est peut être mal utilisé...
cela serait plus une interface entre l'utilisateur et le PC pour effectuer une action...

Côté ARDUINO, il te suffit donc de scruter les pins sur lesquelles seront branchés les bouton et d'envoyer un code sur la ligne série (Serial) lorsqu'un bouton est appuyé et une autre code lorsqu'il est relâché.

Tu peux utiliser la librairie bounce2 pour gérer les rebonds.

OK

Ou comme dit en #1 la librairie de @bricoleau :slight_smile:

Pensez à mettre le Serial au débit plus rapide que 9600.... au moins 115200 bauds

Merci !

Côté ARDUINO, il te suffit donc de scruter les pins sur lesquelles seront branchés les bouton et d'envoyer un code sur la ligne série (Serial) lorsqu'un bouton est appuyé et une autre code lorsqu'il est relâché.

Il n'y a pas de risque de perte du message et que le bouton reste "appuyé" indéfiniment ?

Tu peux utiliser la librairie bounce2 pour gérer les rebonds.

Je suis pas sur d'avoir tout a fait compris a quoi sert cette librairie :confused:

Vous pouvez programmer votre appli PC pour qu’elle valide chaque message si vous voulez en renvoyant un message à l'arduino où coder un Time out pour vos boutons... si vous gérez proprement le port série il n’y a pas de raisons que ça ne fonctionne pas (vous uploadez votre programme arduino plus vite que cela depuis le PC et votre code arrive bien...) mais vous pouvez toujours durcir le protocole avec cksum et ack

Okay, merci beaucoup pour votre aide !