Arduino UNO R4 - Joystick

In diesem Leitfaden lernen wir, wie man einen Joystick mit dem Arduino UNO R4 verwendet. Wir werden Folgendes behandeln:

Arduino UNO R4 und Joystick

Über Joystick

Vielleicht haben Sie schon einen Joystick gesehen, der als Gamecontroller, als Spielzeugsteuerung oder sogar in großen Maschinen wie Baggersteuerungen verwendet wird.

Der Joystick besitzt zwei Potentiometer, die in einer quadratischen Anordnung angeordnet sind, sowie einen Druckknopf. Er liefert die folgenden Ausgänge:

  • Ein Analogwert (von 0 bis 1023) für die horizontale Position (X-Koordinate)
  • Ein Analogwert (von 0 bis 1023) für die vertikale Position (Y-Koordinate)
  • Ein digitaler Zustand eines Tasters (HIGH oder LOW)

Wenn Sie zwei analoge Werte kombinieren, ergeben sie 2-D-Koordinaten. Diese Koordinaten sind zentriert, wenn der Joystick nicht bewegt wird. Sie können die tatsächliche Richtung dieser Koordinaten ganz einfach herausfinden, indem Sie einen Testcode ausführen, den wir im nächsten Abschnitt behandeln werden.

Einige Anwendungen verwenden möglicherweise alle drei Ausgänge, während andere nur einige von ihnen verwenden.

Pinbelegung

Ein Joystick verwendet fünf Pins.

  • GND-Pin: mit GND (0 V) verbinden
  • VCC-Pin: mit VCC (5 V) verbinden
  • VRX-Pin: liefert einen analogen Wert für die horizontale Position (X-Koordinate).
  • VRY-Pin: liefert einen analogen Wert für die vertikale Position (Y-Koordinate).
  • SW-Pin: stammt vom Druckknopf des Joysticks. Er ist normalerweise offen. Durch einen Pull-up-Widerstand wird dieser Pin hoch, wenn er nicht gedrückt ist, und niedrig, wenn er gedrückt ist.
Joystick-Pinbelegung

Wie es funktioniert

  • Links/Rechts-Bewegung
    • Wenn Sie den Joystick nach links oder rechts bewegen, ändert sich das elektrische Signal (Spannung) am VRX-Pin.
    • Beim Bewegen nach links sinkt die Spannung auf 0 Volt.
    • Beim Bewegen nach rechts erhöht sich die Spannung auf 5 Volt.
    • Der Arduino liest diese Spannung ebenfalls aus und wandelt sie in eine Zahl zwischen 0 und 1023 um. 0 Volt entspricht also 0 und 5 Volt entspricht 1023.
  • Hoch-/Runter-Bewegung
    • Ebenso ändert das Bewegen des Joysticks nach oben oder unten die Spannung am VRY-Pin.
    • Beim Bewegen nach oben sinkt die Spannung auf 0 Volt.
    • Beim Bewegen nach unten erhöht sich die Spannung auf 5 Volt.
    • Der Arduino liest diese Spannung ebenfalls aus und wandelt sie in eine Zahl zwischen 0 und 1023 um, genauso wie beim VRX-Pin.
  • Kombinierte Bewegungen:
    • Wenn Sie den Joystick in irgendeine Richtung bewegen (nicht nur rein links/rechts oder hoch/runter), ändert sich die Spannung am VRX-Pin und am VRY-Pin entsprechend seiner Position entlang jeder Achse.
  • Drücken des Joysticks:
    • Wenn Sie den Joystick nach unten drücken (wie das Drücken eines Knopfes), aktiviert sich im Joystick ein interner Knopf.
    • Schließen Sie einen Pull-up-Widerstand an den SW-Pin an, ändert sich die Spannung an diesem Pin beim Drücken von 5 V auf 0 V.
    • Der Arduino liest diese Änderung als digitales Signal aus und zeigt HIGH (5 V) an, wenn nicht gedrückt, und LOW (0 V), wenn gedrückt.

    Zusammenfassend ändern sich beim Bewegen des Joysticks die Spannungen an VRX und VRY, die vom Arduino als Zahlen zwischen 0 und 1023 gelesen werden. Beim Drücken des Joysticks ändert sich die Spannung am SW-Pin, die vom Arduino als HIGH oder LOW gelesen wird.

Verdrahtungsdiagramm

Arduino UNO R4 Joystick-Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Siehe Der beste Weg, den Arduino Uno R4 und andere Komponenten mit Strom zu versorgen.

Wie man für Joysticks programmiert

Der Joystick besteht aus zwei Komponenten: einem analogen Teil (X- und Y-Achse) und einem digitalen Teil (einem Druckknopf).

  • Um die Werte für die X- und Y-Achsen abzulesen, verwenden Sie einfach die Funktion analogRead() am analogen Eingangspin.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Für den digitalen Teil, der ein Druckknopf ist: Es ist einfach nur ein Knopf. Eine einfache und effektive Methode ist die Verwendung der ezButton-Bibliothek. Diese Bibliothek hilft, die Stabilität des Knopfes zu verwalten, und aktiviert außerdem ein internes System, um den Knopf stabil zu halten. Weitere Informationen finden Sie im Arduino UNO R4 - Knopf-Tutorial. Wir zeigen Ihnen, wie Sie den Code im nächsten Teil dieses Tutorials verwenden.

Nachdem wir die Messwerte von den analogen Pins erhalten haben, müssen wir sie möglicherweise in handhabbare Werte umwandeln. Der folgende Abschnitt enthält dazu Beispielcodes.

Arduino UNO R4 Quellcode

Hier sind Beispielcodes für Arduino UNO R4:

  • Example code: holt analoge Werte vom Joystick
  • Example code: holt analoge Werte und überprüft den Tastzustand am Joystick
  • Example code: ändert analoge Werte in Befehle: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Example code: wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern (wie bei einer Schwenk-Neige-Kamera)

Liest analoge Werte vom Joystick

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schnelle Schritte

Folgen Sie diesen Anweisungen Schritt für Schritt:

  • Wenn dies Ihre erste Verwendung des Arduino UNO R4 WiFi/Minima ist, lesen Sie das Tutorial zur Einrichtung der Entwicklungsumgebung für Arduino UNO R4 WiFi/Minima in der Arduino IDE (BASE_URL/tutorials/arduino-uno-r4/arduino-uno-r4-software-installation).
  • Verbinden Sie den Joystick gemäß dem bereitgestellten Diagramm mit dem Arduino UNO R4.
  • Schließen Sie das Arduino UNO R4-Board über ein USB-Kabel an Ihren Computer an.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das passende Arduino UNO R4-Board (z. B. Arduino UNO R4 WiFi) und den COM-Port aus.
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf Ihren Arduino UNO R4 hochzuladen.
  • Bewegen Sie den Joystick ganz bis zum Rand und drehen Sie ihn dann in einer Kreisbewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
  • Überprüfen Sie die Ergebnisse im Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Beim Drehen des Joysticks behalte den Serial Monitor im Auge. Wenn der X-Wert 0 anzeigt, merke dir diese Position als links; das Gegenstück dazu ist rechts. Wenn der Y-Wert 0 ist, merke dir diese Position als oben; das Gegenstück dazu ist unten.

Liest analoge Werte aus und liest den Tastzustand eines Joysticks aus

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Schnelle Schritte

  • Gehen Sie zum Bibliotheken-Symbol auf der linken Seite der Arduino IDE.
  • Suchen Sie nach “ezButton” und finden Sie die Button-Bibliothek von ArduinoGetStarted.com.
  • Drücken Sie die Install-Taste, um die ezButton-Bibliothek hinzuzufügen.
Arduino UNO R4 Taster-Bibliothek
  • Kopiere den Code und öffne ihn in der Arduino IDE.
  • Klicke auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino UNO R4 hochzuladen.
  • Bewege den Joystick-Stick nach links, rechts, oben oder unten.
  • Drücke den oberen Teil des Joysticks nach unten.
  • Überprüfe die Ergebnisse im Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Konvertiert einen analogen Wert in Befehle zum Bewegen nach LINKS/RECHTS/OBEN/UNTEN

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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 } }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie in der Arduino IDE auf die Upload-Schaltfläche, um den Code auf Arduino UNO R4 hochzuladen.
  • Bewegen Sie den Daumenstick nach links, rechts, oben, unten oder in eine andere Richtung.
  • Überprüfen Sie die Ergebnisse im seriellen Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Manchmal gibt es möglicherweise keinen Befehl, einen Befehl oder zwei Befehle gleichzeitig (zum Beispiel UP und LEFT zusammen).

Konvertiert analoge Werte in Winkel, um zwei Servomotoren zu steuern

Sie finden Informationen zum Tutorial Arduino UNO R4 - Joystick-Steuerung des Servomotors.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!