Arduino - Joystick

In diesem Tutorial werden wir lernen, wie man einen Joystick mit Arduino verwendet. Im Detail werden wir lernen:

Joystick-Pinbelegung

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Joystick
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Joystick-Sensor

Du siehst den Joystick wahrscheinlich irgendwo, zum Beispiel als Spielcontroller, als Spielzeug-Controller oder sogar als eine große echte Maschine wie eine Baggersteuerung.

Der Joystick besteht aus zwei Potentiometern, die zueinander quadratisch ausgerichtet sind, und einem Druckknopf. Daher liefert er die folgenden Ausgänge:

  • Ein analoger Wert (von 0 bis 1023), der der horizontalen Position entspricht (X-Koordinate genannt)
  • Ein analoger Wert (von 0 bis 1023), der der vertikalen Position entspricht (Y-Koordinate genannt)
  • Ein digitaler Wert eines Tasters (HIGH oder LOW)

Die Kombination aus zwei analogen Werten kann zweidimensionale Koordinaten erzeugen, deren Mittelpunktwerte auftreten, wenn der Joystick sich in der Ruheposition befindet. Die tatsächliche Richtung der Koordinaten lässt sich einfach bestimmen, wenn man einen Testcode ausführt (im nächsten Teil).

Einige Anwendungen verwenden möglicherweise alle drei Ausgänge, einige Anwendungen verwenden möglicherweise einige der drei Ausgänge.

Pinbelegung

Ein Joystick hat 5 Pins:

  • GND-Pin: muss mit GND (0 V) verbunden werden
  • VCC-Pin: muss mit VCC (5 V) verbunden werden
  • VRX-Pin: gibt einen analogen Wert aus, der der horizontalen Position entspricht (X-Koordinate genannt).
  • VRY-Pin: gibt einen analogen Wert aus, der der vertikalen Position entspricht (Y-Koordinate genannt).
  • SW-Pin: ist der Ausgang des Tasters im Joystick. Er ist normalerweise offen. Wenn wir an diesem Pin einen Pull-up-Widerstand verwenden, ist der SW-Pin hoch, wenn er nicht gedrückt ist, und niedrig, wenn er gedrückt wird.
Joystick-Pinbelegung

So funktioniert es

  • Wenn du den Joystick nach links/rechts bewegst, ändert sich die Spannung am VRX-Pin. Der Spannungsbereich reicht von 0 bis 5 V (0 links und 5 V rechts). Der Spannungswert ist proportional zur Position des Sticks ⇒ Der Messwert am analogen Pin des Arduino liegt zwischen 0 und 1023
  • Wenn du den Joystick nach oben/unten bewegst, ändert sich die Spannung am VRY-Pin. Der Spannungsbereich reicht von 0 bis 5 V (0 oben und 5 V unten). Der Spannungswert ist proportional zur Position des Sticks ⇒ Der Messwert am analogen Pin des Arduino liegt zwischen 0 und 1023
  • Wenn du den Joystick in eine beliebige Richtung bewegst, ändern sich die Spannungen an VRX- und VRY-Pins proportional zur Projektion der Position auf jeder Achse
  • Wenn du den Joystick von oben nach unten drückst, schließt der integrierte Druckschalter im Joystick. Wenn wir am SW-Pin einen Pull-Up-Widerstand verwenden, ändert sich der Ausgang am SW-Pin von 5 V auf 0 V ⇒ Der Messwert am digitalen Pin des Arduino ändert sich von HIGH zu LOW

Verdrahtungsdiagramm

Arduino-Joystick-Verdrahtungsdiagramm

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

Wie man für Joysticks programmiert

Der Joystick besteht aus zwei Teilen: analog (X- und Y-Achse) und digital (Druckknopf).

  • Für die analogen Teile (X- und Y-Achse) muss man lediglich den Wert vom analogen Eingangspin auslesen, indem man die Funktion analogRead() verwendet.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Für den digitalen Teil (Pushbutton): Es handelt sich um einen Knopf. Der einfachste und bequemste Weg ist die Verwendung der ezButton-Bibliothek. Diese Bibliothek unterstützt die Entprellung von Tastern und aktiviert außerdem einen internen Pull-Up-Widerstand. Weitere Informationen zum Taster finden Sie im Arduino - Button Tutorial. Der Code wird im nächsten Abschnitt dieses Tutorials vorgestellt.

Nachdem wir die Werte von analogen Pins gelesen haben, müssen wir sie möglicherweise in steuerbare Werte umwandeln. Der nächste Abschnitt wird dazu Beispielcodes bereitstellen.

Arduino-Code

Dieser Abschnitt wird die folgenden Arduino-Beispielcodes bereitstellen:

  • Beispielcode: liest analoge Werte vom Joystick aus
  • Beispielcode: liest analoge Werte und den Tastzustand vom Joystick aus
  • Beispielcode: wandelt analoge Werte in die Befehle MOVE_LEFT, MOVE_RIGHT, MOVE_UP und MOVE_DOWN um
  • Beispielcode: wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern (z. B. in einer Pan-Tilt-Kamera)

Liest analoge Werte vom Joystick

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-joystick */ #define VRX_PIN A1 // Arduino pin connected to VRX pin #define VRY_PIN A0 // Arduino 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

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf das Arduino-Board hochzuladen.
  • Drücken Sie den Joystick mit dem Daumen maximal bis zum Anschlag und drehen Sie ihn dann in einer Kreisbewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
  • Sehen Sie das Ergebnis im seriellen Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Beim Drehen des Joysticks mit dem Daumen den Seriemonitor weiter beobachten
    • Wenn der X-Wert 0 ist, markiere oder merke die aktuelle Position als links ⇒ die entgegengesetzte Richtung rechts
    • Wenn der Y-Wert 0 ist, markiere oder merke die aktuelle Position als oben ⇒ die entgegengesetzte Richtung unten

    Liest analoge Werte und den Tastenstatus eines Joysticks

    /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-joystick */ #include <ezButton.h> #define VRX_PIN A1 // Arduino pin connected to VRX pin #define VRY_PIN A0 // Arduino pin connected to VRY pin #define SW_PIN 2 // Arduino 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 in der linken Seitenleiste der Arduino IDE.
    • Suchen Sie „ezButton“, dann finden Sie die Button-Bibliothek von ArduinoGetStarted.com
    • Klicken Sie auf die Installieren-Schaltfläche, um die ezButton-Bibliothek zu installieren.
    Arduino-Taster-Bibliothek
    • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
    • Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code auf Arduino hochzuladen
    • Drücken Sie den Daumenknopf des Joysticks nach links/rechts/oben/unten
    • Drücken Sie den Daumenknopf des Joysticks von oben
    • Sehen Sie das Ergebnis im seriellen Monitor
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Wandelt einen analogen Wert in Befehle zum Bewegen nach links/rechts/oben/unten um

    /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-joystick */ #define VRX_PIN A1 // Arduino pin connected to VRX pin #define VRY_PIN A0 // Arduino 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

    • Kopiere den obigen Code und öffne ihn mit der Arduino IDE.
    • Klicke auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino hochzuladen.
    • Drücke den Joystick nach links/rechts/oben/unten oder in eine beliebige Richtung.
    • Sieh dir das Ergebnis im Serial Monitor an.
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Notiz:

    Dabei kann es pro Zeitpunkt null, einen oder zwei Befehle geben (z. B. UP und LEFT gleichzeitig).

    Wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern

    Das Detail wird im Tutorial Arduino - Joystick controls Servo Motor vorgestellt.

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!