Arduino UNO Q - Joystick

Un joystick vous permet de détecter un mouvement sur 2 axes et l'appui d'un bouton — tout comme le stick d'une manette de jeu. Dans ce tutoriel, vous apprendrez comment connecter un joystick à l'Arduino UNO Q, lire ses valeurs d'axe X/Y et l'état du bouton, les convertir en commandes directionnelles et vérifier les lectures du joystick à distance via Telegram.

※ Note:

Différence ADC Arduino UNO Q : Le MCU STM32 sur Arduino UNO Q a un ADC 12 bits (valeurs 0–4095, centre ~2048), comparé à 10 bits (0–1023) sur de nombreuses autres cartes Arduino. La tension de référence est 3,3V. Utilisez toujours ces valeurs lors du mappage des positions du joystick.

Arduino UNO Q - Joystick

Matériel Requis

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Joystick
1×Fils de connexion
1×Recommandé: Shield à bornier à vis pour Arduino Uno
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommandé: Shield plaque d'essai pour Arduino Uno
1×Recommandé: Boîtier pour Arduino Uno
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Arduino Uno

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À Propos du Joystick 2 Axes

Vous avez peut-être rencontré un joystick dans des manettes de jeu, des télécommandes de jouets ou des machines industrielles. Un joystick combine deux potentiomètres et un bouton-poussoir pour produire trois sorties :

  • VRX : Valeur analogique (0–4095 sur Arduino UNO Q) correspondant à la position horizontale (axe X)
  • VRY : Valeur analogique (0–4095 sur Arduino UNO Q) correspondant à la position verticale (axe Y)
  • SW : Signal numérique du bouton-poussoir intégré (LOW quand pressé avec résistance de rappel)

Brochage

Un module joystick a 5 broches :

  • Broche GND : Connectez à GND (0V)
  • Broche VCC : Connectez à 3,3V (le MCU Arduino UNO Q fonctionne à 3,3V)
  • Broche VRX : Axe horizontal — sortie analogique connectée à une broche d'entrée analogique
  • Broche VRY : Axe vertical — sortie analogique connectée à une broche d'entrée analogique
  • Broche SW : Sortie du bouton-poussoir — connectez à une broche d'entrée numérique (utilisez la résistance de rappel interne)
Brochage du Joystick

Fonctionnement

  • Déplacer le pouce gauche/droite fait varier la tension VRX de 0V à 3,3V → le CAN lit de 0 à 4095
  • Déplacer le pouce haut/bas fait varier la tension VRY de 0V à 3,3V → le CAN lit de 0 à 4095
  • En position centrale/repos, VRX et VRY lisent approximativement 2048 (milieu de plage)
  • Appuyer sur le pouce ferme le bouton interne — avec la résistance de rappel activée, SW lit LOW

※ Note:

Exécutez le premier exemple de code ci-dessous avant de câbler quoi que ce soit pour confirmer quelle direction donne des valeurs basses/hautes sur votre joystick spécifique, car l'orientation des axes peut varier selon le fabricant.

Schéma de Câblage

Schéma de Câblage Arduino UNO Q Joystick

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

Broche Joystick Broche Arduino UNO Q
GND GND
VCC 3,3V
VRX A0
VRY A1
SW D2

Comment Programmer pour le Joystick

  • Pour les axes analogiques (VRX, VRY), lisez la valeur CAN avec analogRead() :
int value_X = analogRead(A0); // 0 à 4095 sur Arduino UNO Q int value_Y = analogRead(A1);
  • Pour le bouton (SW), utilisez la bibliothèque ezButton pour l'antirebond intégré et le support de résistance de rappel :
#include <ezButton.h> ezButton button(2); button.loop(); int state = button.getState(); // LOW = pressé, HIGH = relâché
  • Pour convertir les valeurs analogiques en commandes directionnelles, comparez avec des seuils. Sur Arduino UNO Q avec un CAN 12 bits, utilisez ~1600 / ~2400 comme seuils bas/haut (le centre est ~2048) :
if (value_X < 1600) // GAUCHE else if (value_X > 2400) // DROITE

Code MCU

L'Arduino UNO Q dispose de deux processeurs : le MCU STM32 (gère le contrôle matériel en temps réel) et le MPU Qualcomm (exécute Debian Linux). Dans cette section, seul le MCU STM32 est programmé — le côté Linux reste inactif. Une section ultérieure montrera comment les deux processeurs travaillent ensemble.

Exemple 1 : Lire les Valeurs Analogiques X et Y

/* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ #define VRX_PIN A0 // Arduino UNO Q pin connected to VRX #define VRY_PIN A1 // Arduino UNO Q pin connected to VRY int value_X = 0; // stores X-axis ADC value (0 to 4095) int value_Y = 0; // stores Y-axis ADC value (0 to 4095) void setup() { // nothing to set up — analog pins are inputs by default } void loop() { // read 12-bit ADC values from joystick axes (0 to 4095 on Arduino UNO Q) value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // TO DO: use value_X and value_Y in your logic here // Example: map X to a percentage // int x_percent = map(value_X, 0, 4095, 0, 100); delay(200); }

Étapes Rapides

  • Première utilisation de l'Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q pour préparer votre environnement de développement avant de continuer.
  • Câblez le joystick : Connectez GND à GND, VCC à 3,3V, VRX à A0, VRY à A1 selon le schéma de câblage.
  • Connecter : Branchez l'Arduino UNO Q sur votre ordinateur avec un câble USB-C.
  • Ouvrir Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre Arduino UNO Q.
  • Créer une nouvelle application : Cliquez sur le bouton Créer une nouvelle application.
Créer une nouvelle application dans Arduino App Lab sur Arduino UNO Q
  • Donnez un nom à l'application, par exemple : DIYables_Joystick
  • Cliquez sur Créer pour confirmer.
  • Vous verrez un ensemble de dossiers et de fichiers générés dans votre nouvelle application.
Dossiers et fichiers de l'application Arduino App Lab sur Arduino UNO Q
  • Trouvez le fichier sketch/sketch.ino — c'est là que vous collerez le programme MCU.
  • Coller le programme : Copiez le code MCU ci-dessus et collez-le dans le fichier de programme. Laissez les autres fichiers par défaut.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    Add sketch library in Arduino App Lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Search for ezButton created by ArduinoGetStarted.com and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    ezButton ArduinoGetStarted.com

    Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users.

    1.0.6
    Install
    More Info
    • Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser vers le STM32.
    Cliquer sur le bouton Exécuter dans Arduino App Lab sur Arduino UNO Q
    • Déplacez le joystick — observez le comportement en étendant le code avec la logique TO DO, ou passez à la section Bridge pour voir les lectures en direct.
    • Conseil : Déplacez le joystick complètement à gauche, droite, haut et bas pour trouver les valeurs min/max réelles — elles peuvent ne pas atteindre exactement 0 ou 4095 selon votre joystick.

    Exemple 2 : Lire les Valeurs X, Y et l'État du Bouton

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ #include <ezButton.h> #define VRX_PIN A0 // Arduino UNO Q pin connected to VRX #define VRY_PIN A1 // Arduino UNO Q pin connected to VRY #define SW_PIN 2 // Arduino UNO Q pin connected to SW ezButton button(SW_PIN); // create ezButton with internal pull-up int value_X = 0; // stores X-axis ADC value (0 to 4095) int value_Y = 0; // stores Y-axis ADC value (0 to 4095) void setup() { button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read 12-bit ADC values from joystick axes value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); if (button.isPressed()) { // TO DO: handle button press here } if (button.isReleased()) { // TO DO: handle button release here } // TO DO: use value_X and value_Y in your logic here delay(200); }

    Étapes Rapides

    • Utilisez la même application que l'Exemple 1.
    • Remplacez le programme par le code ci-dessus.
    • Connectez également SW à la broche D2 (si ce n'est pas déjà fait).
    • Téléversez et déplacez le joystick et appuyez sur le bouton.
    • Conseil : Les sections TO DO sont là où vous ajoutez votre propre logique — par exemple, basculer une LED sur l'appui du bouton.

    Exemple 3 : Convertir en Commandes Directionnelles

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ #define VRX_PIN A0 // Arduino UNO Q pin connected to VRX #define VRY_PIN A1 // Arduino UNO Q pin connected to VRY // 12-bit ADC on Arduino UNO Q: center ~2048, range 0-4095 #define LEFT_THRESHOLD 1600 #define RIGHT_THRESHOLD 2400 #define UP_THRESHOLD 1600 #define DOWN_THRESHOLD 2400 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int value_X = 0; int value_Y = 0; int command = COMMAND_NO; void setup() { // nothing to set up } void loop() { // read 12-bit ADC values from joystick axes value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // convert analog values to direction commands command = COMMAND_NO; if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND, OR TWO COMMANDS if (command & COMMAND_LEFT) { // TO DO: add your left task here } if (command & COMMAND_RIGHT) { // TO DO: add your right task here } if (command & COMMAND_UP) { // TO DO: add your up task here } if (command & COMMAND_DOWN) { // TO DO: add your down task here } }

    Étapes Rapides

    • Utilisez la même application, remplacez le programme par le code ci-dessus.
    • Téléversez et déplacez le joystick dans les quatre directions.
    • Ajoutez votre propre logique à chaque bloc TO DO (ex. digitalWrite(LED_PIN, HIGH) quand la commande gauche est active).
    • Conseil : À tout moment il peut y avoir aucune commande, une commande, ou deux commandes simultanées (ex. HAUT et GAUCHE en même temps) — votre code doit gérer tous les cas.

    Programmation Bridge Linux + MCU

    L'Arduino UNO Q a deux processeurs qui travaillent ensemble : le MPU (Qualcomm, exécute Debian Linux) et le MCU (STM32, exécute Zephyr OS avec votre programme Arduino). Ils communiquent via RPC grâce à la bibliothèque Arduino_RouterBridge — jamais via des ports série directs.

    • Le joystick est connecté au MCU (STM32) — VRX est câblé sur A0, VRY sur A1, SW sur D2. Le MCU lit les valeurs analogiques et l'état du bouton.
    • Le MPU ne peut pas lire le joystick directement — il doit demander la lecture au MCU via Bridge.call(). Le MCU répond avec les valeurs actuelles X, Y et l'état du bouton.
    • Le MPU a le Wi-Fi — parce que le MPU exécute Debian Linux complet avec Wi-Fi, il peut rapporter les lectures du joystick via Telegram sur demande.
    • Communication : Bridge.call() côté Linux invoque les fonctions Bridge.provide() côté MCU
    • ⚠️ Réservé : /dev/ttyHS1 (Linux) et Serial1 (MCU) sont utilisés par le routeur Arduino — ne les ouvrez jamais directement

    En bref : Le MPU demande la lecture du joystick → le MCU lit X, Y, bouton → le MCU rapporte les valeurs → le MPU enregistre ou les transmet.

    Programme MCU — joystick avec Bridge et sortie Monitor :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ #include "Arduino_RouterBridge.h" #include <ezButton.h> #define VRX_PIN A0 #define VRY_PIN A1 #define SW_PIN 2 ezButton button(SW_PIN); void get_joystick() { button.loop(); int x = analogRead(VRX_PIN); int y = analogRead(VRY_PIN); const char* btn_state = (button.getState() == LOW) ? "PRESSED" : "RELEASED"; Monitor.print("x = "); Monitor.print(x); Monitor.print(", y = "); Monitor.print(y); Monitor.print(", button = "); Monitor.println(btn_state); } void setup() { Bridge.begin(); Monitor.begin(); button.setDebounceTime(50); Bridge.provide("get_joystick", get_joystick); Monitor.println("Joystick Bridge ready"); } void loop() {}

    Script Python (Arduino App Lab) — interroger le joystick depuis Linux :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ from arduino.app_utils import * import time def loop(): while True: Bridge.call("get_joystick") time.sleep(0.5) App.run(user_loop=loop)
    • Note : Assurez-vous que Bridge.begin() est appelé dans le programme MCU et que le programme est téléversé avant d'exécuter le script Python côté Linux.
    • ⚠️ Avertissement : N'ouvrez jamais directement /dev/ttyHS1 (sur Linux) ou n'utilisez pas Serial1 (sur MCU) dans votre code — ceux-ci sont réservés par le routeur Arduino et y accéder cassera le Bridge.

    Étapes Rapides

    • Téléverser le programme MCU : Ouvrez Arduino App Lab, créez une nouvelle application, collez le programme MCU Bridge ci-dessus dans sketch/sketch.ino, installez les bibliothèques ezButton et Arduino_RouterBridge, et cliquez sur Exécuter.
    • Ajouter le script Python : Collez le code Python ci-dessus dans l'onglet Python de la même application.
    • Exécuter l'application : Cliquez sur Exécuter — le côté Python interroge le joystick toutes les 500 ms.
    • Déplacez le joystick et appuyez sur le bouton — regardez X, Y et l'état du bouton se mettre à jour dans la console.
    • Vérifier la console : Ouvrez l'onglet Console → sous-onglet MCU Monitor.

    Sortie de la Console App Lab

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Joystick Bridge ready x = 2048, y = 2048, button = RELEASED x = 512, y = 2048, button = RELEASED x = 512, y = 200, button = RELEASED x = 2048, y = 2048, button = PRESSED

    Intégration Telegram

    Lisez la position actuelle du joystick et l'état du bouton à distance depuis n'importe où via Telegram.

    Si vous n'avez pas encore de bot Telegram, consultez Arduino UNO Q - Bot Telegram pour obtenir votre token de bot avant de continuer.

    Programme MCU : Conservez le même programme MCU de la section Bridge précédente — aucune modification nécessaire. Assurez-vous qu'il est déjà téléversé et s'exécute sur le STM32 avant de continuer.

    Script Python (Arduino App Lab) — bot Telegram pour la lecture du joystick :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q 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-q/arduino-uno-q-joystick */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/read": result = Bridge.call("get_joystick") send_message(chat_id, result) else: send_message(chat_id, "Commands:\n/read — read joystick X, Y position and button state") time.sleep(1) App.run(user_loop=loop)
    • Note : Remplacez YOUR_BOT_TOKEN par le token obtenu depuis @BotFather sur Telegram.
    • Envoyez /read pour obtenir la position actuelle X, Y et l'état du bouton.

    Étapes Rapides

    • Téléverser le programme MCU : Utilisez le programme MCU Bridge de la section précédente (téléversez-le d'abord si ce n'est pas déjà fait).
    • Coller le script Telegram : Copiez le code Python ci-dessus dans l'onglet Python de votre application dans Arduino App Lab.
    • Définir votre token : Remplacez YOUR_BOT_TOKEN dans le script par votre vrai token de bot.
    • Exécuter l'application : Cliquez sur Exécuter — le bot commence à écouter les messages Telegram.
    • Tester : Déplacez le joystick, envoyez /read — le bot répond avec les valeurs X, Y et l'état du bouton.

    Sortie de la Console App Lab

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /read [2026-04-29 12:00:01] x = 2048, y = 2048, button = RELEASED [2026-04-29 12:02:10] Telegram: /read [2026-04-29 12:02:10] x = 512, y = 200, button = RELEASED [2026-04-29 12:04:05] Telegram: /read [2026-04-29 12:04:05] x = 2048, y = 2048, button = PRESSED
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /read
    10:15 AM ✓✓
    x = 2048, y = 2048, button = RELEASED
    10:16 AM
    /read
    10:17 AM ✓✓
    x = 512, y = 200, button = RELEASED
    10:18 AM

    Intégration d'OpenClaw

    Vous pouvez adapter OpenClaw à ce tutoriel en vous référant aux instructions du tutoriel Arduino UNO Q - OpenClaw.

    Idées d'Application / Projets

    • Contrôle de robot à distance : Utilisez les valeurs X/Y du joystick envoyées via Telegram pour diriger la direction et la vitesse d'un robot
    • Caméra pan-tilt : Mappez X à l'angle du servo pan et Y à l'angle du servo tilt pour le positionnement de caméra
    • Manette de jeu : Construisez un jeu simple à 2 joueurs où la position du joystick est lue sur le réseau
    • Contrôle de grue : Utilisez les commandes directionnelles du joystick pour lever, abaisser et faire pivoter un bras de grue miniature
    • Contrôle de curseur : Mappez les valeurs du joystick au mouvement du curseur sur un écran OLED ou TFT

    Mettez-Vous au Défi

    • Facile : Ajoutez une commande Telegram /button qui rapporte uniquement si le bouton du joystick est actuellement pressé ou relâché
    • Moyen : Mappez les valeurs X et Y à des étiquettes directionnelles (GAUCHE, DROITE, HAUT, BAS, CENTRE) et envoyez l'étiquette plutôt que des nombres bruts via Telegram
    • Avancé : Construisez un système pan-tilt à 2 axes où la position du joystick définit les angles de servo en temps réel via le Bridge

    Références de Fonctions

    Tutoriels connexes

    ※ 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 !