Salut à tous
je voulais rajouter une manette sans fil ergonomique de contrôle à un petit projet et ne voulais pas m'embêter à créer une manette...
J'avais dans mes tiroirs une manette (copie chinoise) d'une "Sony" PS2 dualshock (sans moteur de vibration)
Ell a l'avantage d'être livrée avec un module sans fil fonctionnant à 2.4GHz
La manette fonctionne sur alimentation avec 2 piles batons AAA 1.5V standard que vous accédez par une trappe sous la manette, donc c'est vraiment simple et pratique pour tous les utilisateurs, petits et grands et côté arduino on alimentera (3.3V) le module sans fil.
Il y a plusieurs intérêts à explorer cette manette pour des petits projets:
1/ d'une part vous pouvez en trouver pour vraiment pas cher an Asie, par exemple sur eBay à environ 7 euros livraison comprise (sans les piles) (chercher “B58C 64F1 Black 2.4GHz Wireless Dual Vibration Button Game Controller For PS2 PC“)
2/ Bill Porter a déjà étendue une librairie (en reprenant et affinant le travail de @Shutter) qui gère les détails de la communication entre la manette et un Arduino en exposant une API d'assez haut niveau.
3/ il y a de l'information sur internet (par exemple ce très bon post en anglais qui explique un peu le protocole (en gros SPI) et d'autres informations intéressantes)
Bon OK - vous êtes convaincu et voulez jouer avec pour commander votre gadget
Les Branchements:
Mon unité de contrôle à distance n'a pas toutes les pins documentées sur internet mais il a les pins qu'il faut pour jouer et les pins correspondent bien au blog mentionné ci dessus
Le module sans fil a la bonne idée d'exposer des pins avec un accès simple (sans même à avoir à démonter le boîtier) pour des fils Dupont femelle standards.
Prenez une nappe de fils male <--> femelle et prenez les couleurs qui vous permettent par exemple d'avoir le fil rouge de 3.3V au bon endroit (et branchez le marron sur GND)
(bien sûr vous pouvez utiliser les fils que vous voulez)
de l'autre côté connectez votre Arduino UNO ou MEGA de la façon suivante:
Data -> pin D12 (mon fil blanc)
Command --> pin D11 (mon fil noir)
GND --> GND (mon fil marron)
3.3V ---> 3.3V (mon fil rouge)
Attention --> pin D10 (mon fil orange)
Clock --> pin D13 (mon fil jaune)
Mettez des piles dans la télécommande et allumez là avant de brancher l'arduino (qui alimente le module distant)
Installer la librairie:
Vous pouvez trouver la librairie PS2X de Bill Porter sur Github. Elle s'installe "à la main"
- Téléchargement de la librairie en clickant sur "Clone or Download" --> “Download Zip”
- Vous obtenez un fichier
Arduino-PS2X-master.zip
que vous décompressez. - Dans le répertoire obtenu
Arduino-PS2X-master
vous trouverez un dossierPS2X_lib
qu'il ne vous reste plus qu'à déplacer dans le dossier standard de vos librairies Arduino.
Le code:
voilà vous êtes prêts à jouer. la librairie propose une classe PS2X
, on commence par instancier un objet pour représenter la manette et dans le setup()
on appelle config_gamepad()
en donnant les pins utilisées
ensuite c'est simple à utiliser. Quand vous voulez lire l'état de la manette, vous appelez read_gamepad()
et votre instance a ensuite des fonctions qui permettent de savoir quels sont les états de chaque bouton qui sont dénommés par un petit nom dans un #define que vous pouvez lire dans le .h de la librairie
Voici comment ils sont associés aux boutons