Simuler l'appuie d'une touche

Bonjour a tous

J'ai découvert par pur hasard la carte arduino il ya une semaine de cela. Et j'ai commencé a lire les tutoriels/

Je me demandais, est il possible de simuler l'appuie d'une touche sur le clavier avec la carte. Ce que j'aimerais savoir si c'est possible de simuler l'appuie de la touche. C'est a dire, si je suis entrain de jouer a un jeux vidéo par exemple, j'aimerais que lorsque j'appuie sur mon bouton poussoir, cela simule l'appuie de la touche directionnelle haut. Et que donc mon personnage avancera. Le problème c'est que je ne sais pas trop ou chercher :confused:

Par exemple, serait il possible de programmer une manette de jeu pour pc avec arduino ? Je ne me rends absolument pas compte des capacités de cette carte.

Si jamais cela est possible, est ce difficile ? Sachant que j'ai déja programmer en C et j'ai un niveau honorable en pyhton jr ne suis donc pas totalement débutant en prog. Mais je n'ai jamais couplé la prog et l'éléc.

En cherchant un peu, j'ai remarqué que ce lien (http://www.practicalarduino.com/projects/virtual-usb-keyboard) revenait souvent donc je vais chercher avec cela. Mais si vous avez d'autres liens ou des infos, je suis preneur :slight_smile:

Merci d'avance de vos réponses qui je l'espère seront nombreuses

Bonjour,

C'est tout à fait faisable :wink:

Quelques pistes :

Et sur mon blog :

En gros tu veut faire une manette, le Python est encore une bonne fois utile pour l'interprétation coté Pc.

Hello,

Moi je recherche exactement la même chose mais pour simuler l'appui du bouton Enter pour déclencher un logiciel photobooth.

Je viens d'acheter une UNO en prévoyant de l'utiliser avec le logiciel AAC Keys sur l'ordi (pour reconnaître la commande émise par l'Arduino) mais ça ne fonctionne pas ! AAC Keys est un logiciel assez vieux et je suspecte une incompatibilité avec les Windows 7 et cpie. J'ai même essayé la version Mac et ne marche pas non plus alors que sur le moniteur série je vois bien la commande Enter qui arrive.

Je suis débutant alors passer par du Python va être trop long à apprendre, je pense donc que je vais racheter une Leonardo, je n'aurai rien à toucher sur l'ordi et mon programme sera pratiquement le même sauf remplacer "serial.write" par "keyboard.write".

Le python tu dis ? Et par quel moyen ? Je suis beaucoup plus a l'aise avec le python qu'avec le C.

Je n'ai a ma disposition qu'une carte arduino uno. Je vais donc cherchez avec le vusb en espérant comprendre. Le but étant clairement d'arriver à simuler une manette. 4 bouton pour les touches directionelles et 2 boutons pour les touches d'actions. Et je veut que mon programme marche partout. C'est a dire que si je suis sur internet et que j'appuie sur mon bouton objectif (qui simulera la touche entrée par exemple), cela fera l'équivalent de si j'appuyais sur la touche entrée. C'est à dire que cela lancera la recherche.

Après, la plus grosse difficulté va être l'anglais. je n'ai trouvé aucun tuto en français.

Bubblegom:
Le python tu dis ? Et par quel moyen ? Je suis beaucoup plus a l'aise avec le python qu'avec le C.

Sous windows c'est possible avec l'API win32 native :
http://win32com.goermezer.de/content/view/136/254/

Bubblegom:
Je n'ai a ma disposition qu'une carte arduino uno. Je vais donc cherchez avec le vusb en espérant comprendre. Le but étant clairement d'arriver à simuler une manette. 4 bouton pour les touches directionelles et 2 boutons pour les touches d'actions. Et je veut que mon programme marche partout. C'est a dire que si je suis sur internet et que j'appuie sur mon bouton objectif (qui simulera la touche entrée par exemple), cela fera l'équivalent de si j'appuyais sur la touche entrée. C'est à dire que cela lancera la recherche.

Essaye de regarder les projets d'exemples de v-usb, il sont plutôt bien fait.
Le plus dure est de concevoir une table de descripteurs USB fonctionnelle et de respecter le format de rapport d'un joystick.

Par contre je te préviens tout de suite v-usb est une librairie AVR-C classique faite pour être compilé avec avr-gcc et un makefile.
On peut compiler cette librairie avec l'ide arduino mais c'est pas triviale.

Tu as un exemple d'adaptation pour arduino ici :
http://code.google.com/p/vusb-for-arduino/
Mais c'est une très vielle version ...

Bien faire attention au fichier de configuration avec les brochages (voir "atmega328p arduino pinmap" sur google pour les correspondances arduino -> broche/port AVR).

Bubblegom:
Après, la plus grosse difficulté va être l'anglais. je n'ai trouvé aucun tuto en français.

V-usb c'est typiquement le genre de truc qui évolue h24, même les tuto en anglais sont périmés assez rapidement.
Ça demande des connaissances générales du protocole USB, du C pour AVR et de la compilation avr-gcc/makefile :wink:

Bonjour,

Je n'ai pas encore essayé le montage mais je viens de compiler le code selon lien suivant avec la librairie v-usb et ça s'est bien passé. Je vais transférer ça dans l'ARduino (Uno) dès que j'aurais les composants mais d'après vous la compilation sans erreur ne suffit pas pour savoir si la librairie est la bonne ???

Pour le code j'ai pris :

Librairie :

http://vusb-for-arduino.googlecode.com/files/vusb-for-arduino-005.zip

Et pour le montage :

http://www.practicalarduino.com/projects/virtual-usb-keyboard

Tu doit pouvoir retrouver sur le forum une version bien plus récente de vusb-for-arduino avec un patch pour la partie clavier.
Je l'avais fait pour un autre membre, je viens tout juste de m'en rappeler :zipper_mouth_face:

Ok mais tu as une idée de la version que je dois trouver ?

En fait je suis assez pressé par le temps car c'est pour faire un photobooth pour mon mariage et je dois encore fabriquer tout le coffre pour accueillir l'ecran etc. et si la commande par bouton+arduino ne fonctionne pas tout tombe à l'eau.

Si utiliser Vusb n'est pas évident, je me demandais si racheter une Leonardo ne serait pas plus faible. Vous en pensez quoi ?

Merci pour votre aide

fred60:
En fait je suis assez pressé par le temps car c'est pour faire un photobooth pour mon mariage et je dois encore fabriquer tout le coffre pour accueillir l'ecran etc. et si la commande par bouton+arduino ne fonctionne pas tout tombe à l'eau.

La version dans le tuto marche, elle est vieille mais elle marche.
Après pour une utilisation dans un vrai projet sur plusieurs jours par exemple je serait pas catégorique ...

fred60:
Si utiliser Vusb n'est pas évident, je me demandais si racheter une Leonardo ne serait pas plus faible. Vous en pensez quoi ?

Avec la librairie UsbKeyboard qui est fourni avec ça revient en gros à faire comme avec une carte Leonardo.
Du reste le code que j'avais posté sur le forum permettait d'avoir exactement les même fonctions que la leonardo.

ok je vais voir pour essayer ça alors. Par contre la galère est que je n'ai pas encore les composants (commande on-line + frais de port+quantités imposées) et j'ai regardé les commander me revient presque aussi cher qu'une Leonardo...

Merci !

bonjour
j'ai lu un peu en diagonale, mais si j'ai bien compris tu veux simuler l'appui d'une (une seule ? ) touche d'un clavier
pourquoi pas tout simplement "decapsuler'" un clavier usb à , le circuit d'interface est une matrice assez facile à retrouver
et simuler l'appui d'une touche (ou quelques unes) par un arduino de base n'est pas tres compliqué
et peut etre meme qu'il n'y a pas besoin d'arduino :grin:

exemple ici

Oui j'ai vu la solution du clavier mais je trouvais l'Arduino plus "propre" et plus intéressant intellectuellement.

Il est sûr que si je n'y arrive pas avec cette solution je pourrai toujours me rabattre sur le clavier. De plus je ne sais pas si c'est possible mais plutôt que de démonter le clavier, retrouver les bons contacts je peux aussi virer la touche entrée et venir repiquer (en soudant) 2 fils avec un interrupteurs pour simuler l'appui sur la touche. Ce n'est pas très clean mais si je planque tout dans un coffre ce n'est pas grave et l'essentiel est que ça fonctionne.

fred60:
Oui j'ai vu la solution du clavier mais je trouvais l'Arduino plus "propre" et plus intéressant intellectuellement.

Il est sûr que si je n'y arrive pas avec cette solution je pourrai toujours me rabattre sur le clavier. De plus je ne sais pas si c'est possible mais plutôt que de démonter le clavier, retrouver les bons contacts je peux aussi virer la touche entrée et venir repiquer (en soudant) 2 fils avec un interrupteurs pour simuler l'appui sur la touche. Ce n'est pas très clean mais si je planque tout dans un coffre ce n'est pas grave et l'essentiel est que ça fonctionne.

oui je comprend bien, mais quelquefois il faut aller au plus simple, sans chercher l'exploit intellectuel :grin:
sinon tu a la solution :
arduino+servo qui appuie sur la touche enter d'un clavier apres appui sur un bouton
(qui c'est qui a dit au fond de la salle "usine à gaz" ? :grin: )
avantage pas de modif , ni d'intervention sur l'electronique/mecanique du clavier
tu peux meme utiliser un clavier sans fil :grin:

Artouste:
arduino+servo qui appuie sur la touche enter d'un clavier apres appui sur un bouton
(qui c'est qui a dit au fond de la salle "usine à gaz" ? :grin: )
avantage pas de modif , ni d'intervention sur l'electronique/mecanique du clavier
tu peux meme utiliser un clavier sans fil :grin:

Heu, une carte leonardo ce serait quand même plus simple :sweat_smile:

Dans l'ordre je vais voir pour :

Trouver les composants pour pas cher,

Sinon j'achèterai une Leonardo (j'ai pas mal de projets en tête donc ne sera pas perdue pour plus tard)

Et si je lutte trop avec la programmation et/ou pris par le temps je bidouillerai un clavier.

Merci !

skywodd:

Artouste:
arduino+servo qui appuie sur la touche enter d'un clavier apres appui sur un bouton
(qui c'est qui a dit au fond de la salle "usine à gaz" ? :grin: )
avantage pas de modif , ni d'intervention sur l'electronique/mecanique du clavier
tu peux meme utiliser un clavier sans fil :grin:

Heu, une carte leonardo ce serait quand même plus simple :sweat_smile:

oui je sais bien :grin:
mais si c'est juste pour recuperer l'appui simulé de la touche enter, perso je n'hesiterais pas
a "decapsuler" un clavier usb (je dois même déjà avoir fait ça , juste pour "jouer", je regarderais ce soir "à la cave" 8) )
en recup , ça ne coute rien et en neuf à moins de 10€ il y a du choix

J'ai moi même essayé de faire un truc comme ça (pour jouer à des jeux coder avec mon arduino et sans clavier :zipper_mouth_face:) mais j'ai vite butté: c'est pas possible avec une UNO . J'ai donc essayé LUFA, et j'ai même pas compris les tutos en FR ...
Après le problème avec Vusb, c'est qu'il y a une partie hardware, et que mes pins sont presque tous pris ... Et surtout, j'ai pas de prise USB en stock ... J'irai voir dans celui de mon grand-père (je suis sur de trouver ... avec 3 ordis démontés !), et j'en profiterai pour prendre des résistances . (y'en a plein ... On va pas pleurer pour 4 résistances !)

PS: pour ceux veulent, j'utilise pour l'instant un programme en Lua qui reçois les ordres via le port série, mais qui n'émule pas (encore) le clavier. Le voici:

print(" ~ Arduino Lua listen ~ ")
print("     Built for COM3      \n")

arduino = io.open("COM3", "w+b")

print("Create derivation?")
if io.read() == "yes" then
 local socket = require("socket")
 tcp = socket.tcp(25565)
 tcp:bind('*', 25565)
 tcp:listen()
 client = tcp:accept()
end

if not arduino then
 print("No arduino on 'COM3'.")
 os.execute("sleep 5")
 os.exit(-1)
end

less = true --set to true for infinite message
baud = 9600 --set the bauds number

ordre = ""
i = 0
while true do
 if 1/baud > 0 then
  os.execute("sleep "..tostring(1/baud))
 end
 receive = arduino:read()
 if receive then
   print(tostring(receive))
   if string.find(receive, "wait") then
    os.execute("sleep "..tostring(1/baud))
    arduino:write("go")
   end
   if client then
    client:send(receive)
   end
 end
end

arduino:close()
arduino = nil
ordre = nil
receive = nil
i = nil
less = nil
pas = nil

Merci d vos commentaires :wink:

bonsoir
pour exemple
"decapsuler" un clavier usb , reperer le X/Y de la touche enter et cabler un contact "en bidouille"
30 minutes avec les coups de fils :grin:
http://cjoint.com/13av/CDpqCbxrpZB_push.jpg
http://cjoint.com/13av/CDpqCXrWUw7.htm

Geeker:
J'ai moi même essayé de faire un truc comme ça mais j'ai vite butté: c'est pas possible avec une UNO .

Avant d'affirmer des choses comme ça il est bon de citer ses sources et de donner toutes ses informations :wink:

Qu'est ce qui est impossible ?
-> Émuler un périphérique USB device avec une carte arduino UNO ?
-> Créer un contrôleur usb host avec l'arduino UNO ?

Émuler un périphérique USB device avec une UNO est possible de deux facon :

  • avec v-usb
  • avec l'ATmega16u2 qui gère le port série et la libraire LUFA (ou carrément en code bas niveau)

Créer un port usb host : ça c'est pas possible, il faut un contrôleur usb dédié.

Geeker:
J'ai donc essayé LUFA, et j'ai même pas compris les tutos en FR ...

LUFA est un le plus gros projet de driver USB embarqué que tu puisses trouver ...
Déjà que les documentations en anglais font plusieurs centaines de pages faut pas rêver pour avoir une version FR en format tutoriel :wink: