Arduino UNO R4 - Joystick

Dans ce guide, nous allons apprendre à utiliser un joystick avec l'Arduino UNO R4. Nous aborderons les sujets suivants :

Arduino UNO R4 et joystick

À propos du joystick

Vous avez peut-être vu un joystick utilisé comme contrôleur de jeu, comme contrôleur de jouet, ou même dans de grandes machines comme les contrôleurs d’excavatrice.

Le joystick comporte deux potentiomètres disposés en formation carrée et un bouton poussoir. Il fournit les sorties suivantes :

  • Une valeur analogique (de 0 à 1023) pour la position horizontale (coordonnée X)
  • Une valeur analogique (de 0 à 1023) pour la position verticale (coordonnée Y)
  • Un état numérique d'un bouton (HIGH ou LOW)

Lorsque vous combinez deux valeurs analogiques, elles forment des coordonnées en deux dimensions. Ces coordonnées sont centrées lorsque le joystick n'est pas déplacé. Vous pouvez facilement déterminer la direction réelle de ces coordonnées en exécutant un code de test, que nous aborderons dans la section suivante.

Certaines applications pourraient utiliser les trois sorties, alors que d'autres n'en utiliseraient que certaines.

Schéma des broches

Un joystick utilise cinq broches.

  • Broche GND : connectez-la à GND (0V)
  • Broche VCC : connectez-la à VCC (5V)
  • Broche VRX : donne une valeur analogique pour la position horizontale (coordonnée X)
  • Broche VRY : donne une valeur analogique pour la position verticale (coordonnée Y)
  • Broche SW : provient du bouton-poussoir du joystick. Elle est généralement ouverte. L'utilisation d'une résistance de tirage (pull-up) fait que cette broche est à l'état haut lorsque non pressée et à l'état bas lorsque pressée.
Répartition des broches du joystick

Comment cela fonctionne

  • Mouvement Gauche/Droite
    • Lorsque vous déplacez le joystick vers la gauche ou vers la droite, il modifie le signal électrique (tension) à la broche VRX.
    • En allant vers la gauche, la tension chute à 0 volt.
    • En allant vers la droite, la tension augmente à 5 volts.
    • L'Arduino lit cette tension et la convertit en un nombre entre 0 et 1023. Ainsi, 0V correspond à 0 et 5V correspond à 1023.
  • Mouvement Haut/Bas:
    • De même, déplacer le joystick vers le haut ou le bas modifie la tension à la broche VRY.
    • En allant vers le haut, la tension chute à 0 volt.
    • En allant vers le bas, la tension augmente à 5 volts.
    • L'Arduino lit aussi cette tension, la convertissant en un nombre entre 0 et 1023, tout comme pour la broche VRX.
  • Mouvements Combinés:
    • Lorsque vous déplacez le joystick dans n'importe quelle direction (pas seulement purement gauche/droite ou haut/bas), il modifie la tension sur les broches VRX et VRY en fonction de sa position le long de chaque axe.
  • Appuyer sur le Joystick:
    • Lorsque vous appuyez sur le joystick vers le bas (comme appuyer sur un bouton), il active un bouton interne à l'intérieur du joystick.
    • Si vous connectez une résistance de tirage (pull-up) à la broche SW, la tension sur cette broche passera de 5V à 0V lorsque vous appuyez.
    • L'Arduino lit ce changement comme un signal numérique, affichant HIGH (5V) lorsque ce n'est pas pressé et LOW (0V) lorsque c'est pressé.

    En résumé, déplacer le joystick modifie les tensions sur VRX et VRY, que l'Arduino lit comme des nombres compris entre 0 et 1023. Appuyer sur le joystick modifie la tension sur la broche SW, que l'Arduino lit comme HIGH ou LOW.

Diagramme de câblage

Schéma de câblage du joystick pour Arduino UNO R4

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Voir Comment alimenter l'Arduino UNO R4..

Comment programmer pour un joystick

Le joystick se compose de deux composants : une partie analogique (les axes X et Y) et une partie numérique (un bouton-poussoir).

  • Pour lire les valeurs des axes X et Y, il suffit d'utiliser la fonction analogRead() sur la broche d'entrée analogique.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Pour la partie numérique, qui est un bouton-poussoir : ce n'est qu'un bouton. Une méthode simple et efficace consiste à utiliser la bibliothèque ezButton. Cette bibliothèque aide à gérer la stabilité du bouton et active également un système interne pour maintenir le bouton stable. Vous pouvez en savoir plus dans le Arduino UNO R4 - Bouton.. Nous vous montrerons comment utiliser le code dans la prochaine partie de ce tutoriel.

Après avoir obtenu les lectures des broches analogiques, il peut être nécessaire de les convertir en valeurs plus faciles à manipuler. La section suivante fournira des exemples de code pour cela.

Code pour Arduino UNO R4

Voici des exemples de codes pour l'Arduino UNO R4 :

  • Exemple de code : récupère les valeurs analogiques du joystick
  • Exemple de code : récupère les valeurs analogiques et vérifie l'état du bouton sur le joystick
  • Exemple de code : change la valeur analogique en commandes : MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Exemple de code : transforme les valeurs analogiques en angles pour gérer deux servomoteurs (comme dans une caméra pan-tilt)

Lit les valeurs analogiques du joystick

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

Étapes rapides

Suivez ces instructions étape par étape :

  • Si c'est la première fois que vous utilisez l'Arduino Uno R4 WiFi/Minima, reportez-vous au tutoriel sur Arduino UNO R4 - Installation du logiciel..
  • Connectez le joystick à l'Arduino UNO R4 selon le schéma fourni.
  • Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Uno R4 appropriée (par exemple, Arduino Uno R4 WiFi) et le port COM.
  • Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur votre Arduino UNO R4.
  • Poussez le stick du joystick jusqu’au bord, puis faites-le tourner en cercle (dans le sens horaire ou antihoraire).
  • Vérifiez les résultats dans le moniteur série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • En tournant le joystick, gardez un œil sur le moniteur série. Si la valeur X affiche 0, considérez cette position comme gauche ; l'inverse est droite. Si la valeur Y est 0, notez cette position comme étant en haut ; l'inverse est en bas.

Lit les valeurs analogiques et lit l'état du bouton d'un joystick

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // To store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

Étapes rapides

  • Accédez à l'icône Libraries sur le côté gauche de l'IDE Arduino.
  • Recherchez “ezButton” et localisez la bibliothèque de boutons par ArduinoGetStarted.com.
  • Appuyez sur le bouton Install pour ajouter la bibliothèque ezButton.
Bibliothèque de boutons Arduino UNO R4
  • Copiez le code et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur l'Arduino UNO R4.
  • Déplacez le joystick vers la gauche, vers la droite, vers le haut ou vers le bas.
  • Appuyez sur le dessus du joystick.
  • Vérifiez les résultats dans le Moniteur Série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Convertit une valeur analogique en commandes Gauche/Droite/Haut/Bas

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int xValue = 0 ; // To store value of the X axis int yValue = 0 ; // To store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (xValue < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (xValue > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (yValue < UP_THRESHOLD) command = command | COMMAND_UP; else if (yValue > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code vers l'Arduino UNO R4.
  • Faites bouger le joystick vers la gauche, vers la droite, vers le haut, vers le bas, ou dans toute autre direction.
  • Vérifiez les résultats dans le Moniteur Série.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Note:

Parfois, il peut n'y avoir aucune commande, une commande ou deux commandes en même temps (par exemple, HAUT et GAUCHE ensemble).

Convertit des valeurs analogiques en angles pour contrôler deux servomoteurs

Vous pouvez trouver des informations sur le tutoriel Arduino UNO R4 - Joystick - Servomoteur..

Vidéo

Références de fonctions

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !