Arduino UNO Q - Joystick
Ein Joystick ermöglicht es Ihnen, 2-Achsen-Bewegungen und einen Tastendruck zu erkennen – genau wie ein Spielcontroller-Analogstick. In diesem Tutorial erfahren Sie, wie Sie einen Joystick mit Arduino UNO Q verbinden, seine X/Y-Achsenwerte und den Tastenzustand auslesen, diese in Richtungsbefehle umwandeln und Joystick-Messwerte remote über Telegram abrufen.
※ Notiz:
Arduino UNO Q ADC-Unterschied: Der STM32-Mikrocontroller auf Arduino UNO Q hat einen 12-Bit-ADC (Werte 0–4095, Mitte ~2048), im Vergleich zu 10-Bit (0–1023) auf vielen anderen Arduino-Boards. Die Referenzspannung beträgt 3,3V. Verwenden Sie diese Werte immer beim Mapping von Joystick-Positionen.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über 2-Achsen-Joystick
Sie haben möglicherweise einen Joystick in Game-Controllern, Spielzeugcontrollern oder Industriemaschinen kennengelernt. Ein Joystick kombiniert zwei Potentiometer und einen Taster, um drei Ausgaben zu erzeugen:
- VRX: Analogwert (0–4095 auf Arduino UNO Q) entsprechend der horizontalen Position (X-Achse)
- VRY: Analogwert (0–4095 auf Arduino UNO Q) entsprechend der vertikalen Position (Y-Achse)
- SW: Digitalsignal vom integrierten Taster (LOW bei Druck mit Pull-up)
Pinbelegung
Ein Joystick-Modul hat 5 Pins:
- GND-Pin: Mit GND (0V) verbinden
- VCC-Pin: Mit 3,3V verbinden (Arduino UNO Q-Mikrocontroller arbeitet mit 3,3V)
- VRX-Pin: Horizontale Achse – analoge Ausgabe verbunden mit analogem Eingangspin
- VRY-Pin: Vertikale Achse – analoge Ausgabe verbunden mit analogem Eingangspin
- SW-Pin: Tasterausgang – mit digitalem Eingangspin verbinden (interner Pull-up verwenden)

Funktionsweise
- Bewegung des Daumens nach links/rechts variiert die VRX-Spannung von 0V bis 3,3V → ADC liest 0 bis 4095
- Bewegung des Daumens nach oben/unten variiert die VRY-Spannung von 0V bis 3,3V → ADC liest 0 bis 4095
- In Mittel-/Ruheposition lesen sowohl VRX als auch VRY ungefähr 2048 (Mittenwert)
- Drücken des Daumens nach unten schließt den internen Taster – mit aktiviertem Pull-up liest SW LOW
※ Notiz:
Führen Sie das erste Code-Beispiel unten aus, bevor Sie etwas verdrahten, um zu bestätigen, welche Richtung niedrige/hohe Werte auf Ihrem spezifischen Joystick ergibt, da die Achsenorientierung je nach Hersteller variieren kann.
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
| Joystick-Pin | Arduino UNO Q-Pin |
|---|---|
| GND | GND |
| VCC | 3,3V |
| VRX | A0 |
| VRY | A1 |
| SW | D2 |
Programmierung für Joystick
- Für die analogen Achsen (VRX, VRY) lesen Sie den ADC-Wert mit analogRead():
- Für die Taste (SW) verwenden Sie die ezButton-Bibliothek für eingebautes Debouncing und Pull-up-Unterstützung:
- Zum Umwandeln von Analogwerten in Richtungsbefehle vergleichen Sie sie mit Schwellwerten. Auf Arduino UNO Q mit 12-Bit-ADC verwenden Sie ~1600 / ~2400 als niedrige/hohe Schwellwerte (Mitte ist ~2048):
Mikrocontroller-Code
Der Arduino UNO Q hat zwei Prozessoren: den STM32-Mikrocontroller (verwaltet Echtzeit-Hardware-Steuerung) und die Qualcomm-MPU (läuft Debian Linux). In diesem Abschnitt wird nur der STM32-Mikrocontroller programmiert – die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.
Beispiel 1: X und Y-Analogwerte auslesen
Schnellschritte
- Erste Verwendung mit Arduino UNO Q? Befolgen Sie das Tutorial Erste Schritte mit Arduino UNO Q, um Ihre Entwicklungsumgebung vor dem Fortfahren vorzubereiten.
- Joystick verdrahten: Verbinden Sie GND mit GND, VCC mit 3,3V, VRX mit A0, VRY mit A1 gemäß dem Verdrahtungsdiagramm.
- Verbinden: Stecken Sie Arduino UNO Q mit einem USB-C-Kabel in Ihren Computer.
- Arduino App Lab öffnen: Starten Sie Arduino App Lab und warten Sie, bis es Arduino UNO Q erkennt.
- Eine neue App erstellen: Klicken Sie auf die Schaltfläche Create New App.

- Geben Sie der App einen Namen, z. B.: DIYables_Joystick
- Klicken Sie auf Create zum Bestätigen.
- Sie sehen eine Reihe von Ordnern und Dateien, die in Ihrer neuen App generiert wurden.

- Finden Sie die sketch/sketch.ino-Datei – hier wird die MCU-Skizze eingefügt.
- 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.
- Hochladen: Klicken Sie in Arduino App Lab auf die Run-Schaltfläche, um zu kompilieren und auf den STM32 hochzuladen.

- Joystick bewegen – beobachten Sie das Verhalten durch Erweiterung des Codes mit TO DO-Logik oder wechseln Sie zum Bridge-Abschnitt, um Live-Messwerte zu sehen.
- Pro-Tipp: Bewegen Sie den Joystick vollständig nach links, rechts, oben und unten, um die tatsächlichen Min/Max-Werte zu finden – diese erreichen möglicherweise nicht genau 0 oder 4095, je nach Ihrem Joystick.
Beispiel 2: X-, Y-Werte und Tastenzustand auslesen
Schnellschritte
- Verwenden Sie dieselbe App aus Beispiel 1.
- Ersetzen Sie die Skizze durch den Code oben.
- Verbinden Sie auch SW mit Pin D2 (falls nicht bereits geschehen).
- Hochladen und Joystick bewegen sowie Taste drücken.
- Pro-Tipp: Die TO DO-Abschnitte sind der Ort, an dem Sie Ihre eigene Logik hinzufügen – zum Beispiel eine LED bei Tastendruck umschalten.
Beispiel 3: In Richtungsbefehle umwandeln
Schnellschritte
- Verwenden Sie dieselbe App, ersetzen Sie die Skizze durch den Code oben.
- Hochladen und Joystick in alle vier Richtungen bewegen.
- Fügen Sie Ihre eigene Logik zu jedem TO DO-Block hinzu (z. B. digitalWrite(LED_PIN, HIGH) wenn linker Befehl aktiv ist).
- Pro-Tipp: Zu jedem Zeitpunkt kann es keinen Befehl, einen Befehl oder zwei gleichzeitige Befehle geben (z. B. UP und LEFT gleichzeitig) – Ihr Code muss alle Fälle verarbeiten.
Linux + MCU Bridge-Programmierung
Der Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, läuft Debian Linux) und der MCU (STM32, läuft Zephyr OS mit Ihrer Arduino-Skizze). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek – niemals über rohe serielle Ports.
- Der Joystick ist mit dem MCU (STM32) verbunden – VRX ist mit A0 verdrahtet, VRY mit A1, SW mit D2. Der MCU liest die Analogwerte und den Tastenzustand.
- Die MPU kann den Joystick nicht direkt lesen – sie muss die Messung vom MCU über Bridge.call() anfordern. Der MCU antwortet mit den aktuellen X-, Y-Werten und dem Tastenzustand.
- Die MPU hat Wi-Fi – da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann sie Joystick-Messwerte auf Anforderung über Telegram melden.
- Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide()-Funktionen auf der MCU-Seite auf
- ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino-Router verwendet – öffnen Sie sie nie direkt
Kurz gesagt: MPU fordert Joystick-Messung an → MCU liest X, Y, Taste → MCU meldet Werte → MPU protokolliert oder leitet weiter.
MCU-Skizze – Joystick mit Bridge und Monitor-Ausgabe:
Python-Skript (Arduino App Lab) – Joystick von Linux abfragen:
- Hinweis: Stellen Sie sicher, dass Bridge.begin() in der MCU-Skizze aufgerufen wird und die Skizze hochgeladen ist, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
- ⚠️ Warnung: Öffnen Sie /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) nie direkt in Ihrem Code – diese sind vom Arduino-Router reserviert und der Zugriff darauf unterbricht die Bridge.
Schnellschritte
- MCU-Skizze hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie die Bridge-MCU-Skizze oben in sketch/sketch.ino ein, installieren Sie ezButton- und Arduino_RouterBridge-Bibliotheken und klicken Sie auf Run.
- Python-Skript hinzufügen: Fügen Sie den Python-Code oben auf der Python-Registerkarte der gleichen App ein.
- App ausführen: Klicken Sie auf Run – die Python-Seite fragt den Joystick alle 500 ms ab.
- Joystick bewegen und Taste drücken – beobachten Sie die Aktualisierung von X, Y und Tastenzustand in der Konsole.
- Konsole überprüfen: Öffnen Sie die Registerkarte Konsole → MCU Monitor-Unterregisterkarte.
App Lab-Konsolenausgabe
Telegram-Integration
Lesen Sie die aktuelle Joystick-Position und den Tastenzustand remote von überall über Telegram.
Wenn Sie noch keinen Telegram-Bot haben, lesen Sie Wie man einen Telegram-Bot erstellt, um Ihr Bot-Token vor dem Fortfahren zu erhalten.
MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt – keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits auf dem STM32 hochgeladen und ausgeführt wird, bevor Sie fortfahren.
Python-Skript (Arduino App Lab) – Telegram-Bot für Joystick-Messung:
- Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das von @BotFather auf Telegram erhaltene Token.
- Senden Sie /read, um die aktuelle X-, Y-Position und den Tastenzustand zu erhalten.
Schnellschritte
- MCU-Skizze hochladen: Verwenden Sie die Bridge-MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls nicht bereits geschehen).
- Telegram-Skript einfügen: Kopieren Sie den Python-Code oben auf die Python-Registerkarte Ihrer App in Arduino App Lab.
- Ihr Token setzen: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr eigentliches Bot-Token.
- App ausführen: Klicken Sie auf Run – der Bot beginnt mit dem Abhören von Telegram-Nachrichten.
- Testen Sie es: Bewegen Sie den Joystick, senden Sie /read – der Bot antwortet mit den X-, Y-Werten und dem Tastenzustand.
App Lab-Python-Konsolenausgabe
ArduinoBot
OpenClaw-Integration
Sie können die OpenClaw an dieses Tutorial anpassen, indem Sie sich auf die Anleitung unter Arduino Uno Q - OpenClaw Tutorial beziehen
Anwendungs-/Projektideen
- Ferngesteuerter Roboter: Verwenden Sie Joystick-X/Y-Werte, die über Telegram gesendet werden, um die Richtung und Geschwindigkeit eines Roboters zu steuern
- Schwenk-Neigungs-Kamera: Ordnen Sie X zum Schwenkservowinkel und Y zum Neigungsservowinkel für die Kamerapositionierung zu
- Spielcontroller: Erstellen Sie ein einfaches 2-Spieler-Spiel, bei dem die Joystick-Position über das Netzwerk gelesen wird
- Kransteuerung: Verwenden Sie Joystick-Richtungsbefehle, um einen Modellkranarm hochzufahren, herunterzufahren und zu schwingen
- Cursorsteuerung: Ordnen Sie Joystick-Werte der Cursorbewegung auf einem OLED- oder TFT-Display zu
Fordern Sie sich selbst heraus
- Einfach: Fügen Sie einen /button-Telegram-Befehl hinzu, der nur angibt, ob die Joystick-Taste derzeit gedrückt oder losgelassen ist
- Mittel: Ordnen Sie die X- und Y-Werte Richtungsbeschriftungen (LINKS, RECHTS, OBEN, UNTEN, MITTE) zu und senden Sie die Beschriftung statt Rohdaten über Telegram
- Fortgeschrittene: Bauen Sie ein 2-Achsen-Servo-Schwenk-Neigungssystem, bei dem die Joystick-Position die Servowinkel in Echtzeit über die Bridge einstellt