Header Ads

Raspberry-Pi: Controleur Manette avec interface clavier pour émulateur Mame

Introduction
Il y a environ un mois, nous vous entretenions dans cet article de notre tutoriel sur le rétro-gaming permettant de transformer un Raspberry-Pi en console de Jeu Mame en utilisant ces magnifiques boutons + manette d'arcade.
Manette Arcade disponible chez MCHobby

Boutons d'arcades disponible chez MCHobby
Alternative au branchement GPIO
Un client me faisait justement remarquer que le montage sur GPIO est fastidieux et peu confortable.
Il pourtant tout à fait possible de jouer à Mame (voir Mame sur Wikipedia) au clavier. Dès lors, pourquoi ne pas utiliser un encodeur clavier et simuler des frappes clavier lorsque l'on joue avec sa manette.

Démonter et réutiliser l'encodeur d'un clavier n'est pas forcement une tâche plus aisée... mais rassurez vous, nous avons des Arduino Leonardo :-)
Arduino Léonardo disponible chez MCHobby
Arduino Léonardo comme contrôleur clavier
La grande force d'Arduino Léonardo est de pouvoir se faire passer pour un clavier (ou une souris) USB.
Avec quelques lignes de code, il est donc possible d'envoyer au système d’exploitation la pression/relâchement d'une touche sur le clavier et l'OS ne vois que du feu :-) ! J'ai déjà testé cette fonctionnalité avec un Arduino Esplora (un dérivé direct du Leonardo)

Comme toute la gamme Arduino, notre petit Léonardo dispose d'entrées/sorties, il est donc possible de raccorder la manette et 4 boutons (soit 8 entrées sur le Leonardo) et cela laisse même encore des possibilités ;-)
Un WinShield (carte de raccordement avec bornier) serait même le bienvenu pour faciliter le prototypage :-)
Comme les Arduino se programment simplement et son largement supportés par la communauté, ce type d'interface offre un large éventail de possibilités pour un investissement d'apprentissage fort raisonnable.

Du coup, vous branchez manette + Leonardo sur le port USB de votre Raspberry Pi et votre manette envoie des pressions de touche clavier à l'OS (qu'il soit Raspberry ou simple PC d'ailleurs).

Controleur Clavier + Raspberry - Avantage et inconvénient
Avantages
Côté avantage, c'est pas compliqué... vous pouvez raccorder presque n'importe quoi sur un Arduino et l'utiliser comme contrôleur. Les possibilités sont illimitées... vous pourriez même utiliser un pédalier de vélo si vous le vouliez ;-)

Inconvenient - limite des capacités techniques du Pi
Il est important de garder en mémoire les limitations techniques du Raspberry Pi en réalisant un contrôleur clavier avec un Arduino.
Vous serez sans doute surpris d'apprendre qu'un Arduino est suffisamment rapide que pour faire dérailler la couche matérielle du Raspberry-Pi. Avec une fréquence d'horloge de 16Mhz, votre Arduino Léonardo est capable de presser et relâcher les touches plus vite que n'importe quel super héro ne pourrait le faire.
En face, votre Raspberry doit pouvoir absorber le flux de donnée. Il faudra donc ralentir votre programme Arduino avec des instructions delay().
Vous devez savoir que la Pile USB du Raspberry attend une réactivité exemplaire de la part du processeur SOC. Si le processeur ne répond pas endéans la milli-seconde, le paquet d'information en provenance de la pile USB est... "perdu".
Si vous stressez fort votre Système d'exploitation, votre port USB (avec un clavier fou ou un disque dur USB très sollicité), votre connexion réseau (qui passe aussi par la pile USB) votre OS pourrait fort bien rater un paquet d'information en provenance de la la pile USB. Ce paquet pourrait contenir une instruction comme "enfoncer" ou "relâcher" une touche clavier ... soit depuis un vrai clavier... soit depuis votre programme Arduino.
Le tout est donc une question de dosage entre charge processeur sur votre Pi et rafale de touche clavier envoyé depuis votre Arduino sur le port USB du Pi. Bref, rien d'impossible. 

Recommandation de développement pour interface Clavier/souris avec Leonardo/Arduino micro
Il est difficile de programmer la carte Leonardo si la bibliothèque Souris et Clavier est continuellement en fonctionnement. Les fonctions tels que Mouse.move() et Keyboard.print() déplace le curseur souris et envoi des frappes claviers à l'ordinateur sur lequel il est connecté... imaginez que vous devez cliquer sur l'icone téléversement d'Arduino IDE pendant que votre programme dans la carte bouge la souris dans tous les sens... pour l'avoir testé, je vous assure que c'est franchement FUN au début ;-).

Bref, pour éviter cet inconvénient, ajouter un bouton sur votre montage... et ne démarrez l'utilisation de la librairie clavier/souris que lorsque vous êtes prêt.
Il est donc recommandé de contrôler l'activation/désactivation du système soit à l'aide d'un bouton physique, soit à l'aide d'une séquence spécifique :-).
Lorsque vous utiliser les bibliothèques Souris (Mouse) ou Clavier (Keyboard) il est préférable d'abord tester les "sorties" de votre programme en utilisant Serial.print(). De cette façon, vous savez quelles valeurs seront rapportés par votre programme Arduino en tant que Clavier ou Souris. Voyez les différents exemples Mouse et Keyboard dans l'environnement Arduino IDE.

Vous trouverez plus d'information sur cette page d'Arduino.cc

Vous voulez plus de boutons ?
Vous voulez ajouter plus de boutons? Mais il n'y a pas assez d'entrée/sortie sur Arduino pour la quantité de bouton a ajouter?
Pas de problème, vous pouvez utiliser cette technique largement employée dans les KeyPad. Avec 8 entrées/sorties, il est possible de détecter 16 touches et avec 9 entrées/sorties nous pouvons détecter 20 boutons.
Principe du KeyPad - voir notre tutoriel
Principe du KeyPad - Voir notre tutoriel

Et maintenant
Il faut encore préparer un schéma de montage et un programme Arduino de base... mais je suis certain que la plupart de nos Arduinistes sauront se
débrouiller à partir d'ici ;-) 

Nos petits conseils:
  • Réservez la broche 13 (sur laquelle est branché la LED de la carte Leonardo) pour fournir un retour d'information. Ex: L'allumer quand le clavier est actif.
  • Pensez à brancher un potentiomètre sur la broche A0, cela permettra de configurer, par exemple, la vitesse d'un tir automatique. 
  • Réservez les broches 0 et 1 (du port série) et ne les utilisez qu'en dernier recourt. 
  • Réservez les broches A4 et A5 (elles pourraient être fort utiles si vous voulez utiliser le bus I2C)
  • N'activer le programme "clavier" du Léonardo qu'après avoir pressé l'un des boutons. Il sera toujours possible de faire un reset de la carte Leonardo (avec le bouton reset) pour réinitialiser la carte (et désactiver le programme).  
Où acheter
Compléments utiles