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.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À 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)

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

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() :
- Pour le bouton (SW), utilisez la bibliothèque ezButton pour l'antirebond intégré et le support de résistance de rappel :
- 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) :
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
É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.

- 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.

- Trouvez le fichier sketch/sketch.ino — c'est là que vous collerez le programme MCU.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- Search for ezButton created by ArduinoGetStarted.com and click the Install button.
- Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser vers le STM32.

- 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
É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
É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 :
Script Python (Arduino App Lab) — interroger le joystick depuis Linux :
- 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
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 :
- 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
ArduinoBot
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