La livraison gratuite de plus de 1000DH pour les particuliers
Module PS2 Double Axe XY Joystick Arduino
25.00 د.م.
12 en stock
Tutoriel: Utilisation d’un PS2 Joystick avec Arduino
Le joystick est un capteur de position qui renvoie deux valeurs analogiques représentant sa position X,Y. Il peut servir d’interface pour naviguer dans un menu ou bien pour piloter un objet en direction ou en vitesse. On le retrouve couramment sur les manettes pour jeux vidéo, les télécommandes de modélisme ou encore sur les tableaux de bord machines industrielles.
Matériel
- Ordinateur
- Arduino UNO
- Câble USB A Mâle/B Mâle
- Joystick PS2
Principe de fonctionnement
Le joystick est composé de deux potentiomètres couplés mécaniquement placés de manière à détecter les composantes horizontale et verticale du joystick. Ainsi les valeurs de résistance des potentiomètres varient indépendamment en fonction de la position du joystick.
Schéma
Le joystick renvoie deux valeurs analogiques que nous brancheront naturellement sur les entrées analogiques du microcontrôleur.

Code
Le joystick s’utilise comme l’association de deux potentiomètres et d’un bouton poussoir. Nous allons donc définir deux entrées analogiques pour récupérer les valeurs de position et une entrée digitale pour le bouton intégré au Joystick. Pratiquement, les valeurs analogiques brutes ne seront pas utilisés directement. Elle serviront à piloter des variables avec leurs propres domaines de définition (valeurs extrêmes, précision, type, etc.). Ceci étant dit, il peut être intéressant de définir une fonction qui permettra de convertir la valeur brute en valeur utilisable. Dans notre exemple, nous choisissons une plage de valeur allant de -100 à 100, qui peut être interprétée comme la vitesse d’un moteur avec une valeur négative représentant un sens de rotation opposé et 100 représentant la vitesse maximale.
/*
* Réaliser par Micro-Electroniques Générales au Maroc
* Visite notre site megma.ma
*/
//Constants #define NUM_JOY 2 #define MIN_VAL 0 #define MAX_VAL 1023 //Parameters const int joyPin [2] = {A0, A1}; const int joyBtn = 2; const int joyOffset = 0; //Variables int joyVal [NUM_JOY] = {0, 0}; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init Joystick for (int i = 0; i < NUM_JOY; i++) pinMode(joyPin[i], INPUT); } void loop() { readJoystick(); delay(500); } void readJoystick( ) { /* function readJoystick */ ////Test routine for Joystick for (int i = 0; i < NUM_JOY; i++) { joyVal[i] = analogRead(joyPin[i]); Serial.print(F("joy")); Serial.print(i); Serial.print(F(" : ")); Serial.println(joyVal[i]); } for (int i = 0; i < NUM_JOY; i++) { Serial.print(F("Conv")), Serial.print(i); Serial.print(F(" : ")); Serial.println(joyRawToPhys(joyVal[i])); } if (!digitalRead(joyBtn)) { Serial.println(F("Joy Button pressed")); } } int joyRawToPhys(int raw) { /* function joyRawToPhys */ ////Joystick conversion rule float phys = map(raw, MIN_VAL, MAX_VAL, -100 + joyOffset, 100 + joyOffset) - joyOffset; // return phys; }
Résultat
Une fois le code chargé dans le microcontrôleur vous devriez voir les valeurs de X et Y évoluer en fonction de la position du Joystick. On observe aussi qu’en position de repos, la conversion des valeurs brutes n’est pas égale à zéro. Il est possible de corriger cet écart en ajoutant un offset au paramètre de conversion.
Applications
- Créer une télécommande pour piloter votre microcontrôleur
Sources
Plus d’informations visite notre page Facebook.
Avis
Il n’y a pas encore d’avis.