Arduino Nano - Joystick

Dieses Tutorial erklärt Ihnen, wie man einen Joystick mit dem Arduino Nano verwendet. Im Detail werden wir lernen:

Arduino Nano Joystick

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×Joystick
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

Oder Sie können die folgenden Kits kaufen:

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 2-Achs-Joystick

Möglicherweise sind Sie schon an verschiedenen Orten auf einen Joystick gestoßen, zum Beispiel als Spielcontroller, als Spielzeug-Controller oder sogar an einer großen Maschine wie dem Bedienfeld eines Baggers.

Der Joystick besteht aus zwei Potentiometern, die zueinander senkrecht stehen, und einem Druckknopf. Daher erzeugt er die folgenden Ausgänge:

  • Ein analoger Wert im Bereich von 0 bis 1023 (vom Arduino gelesen), der der horizontalen Position entspricht (bekannt als X-Koordinate)
  • Ein analoger Wert im Bereich von 0 bis 1023 (vom Arduino gelesen), der der vertikalen Position entspricht (bekannt als Y-Koordinate)
  • Ein digitaler Wert des Tasters (entweder HIGH oder LOW)

Deshalb:

  • Zwei analoge Werte können zu 2D-Koordinaten zusammengeführt werden.
  • Das Zentrum des 2D-Koordinatensystems ist die Ruheposition des Joysticks.
  • Um die Richtung des Joysticks zu bestimmen, führen Sie einen Testcode aus, der diese Information im nächsten Abschnitt präsentiert.

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

Die Pinbelegung des Joysticks

Ein Joystick hat 5 Pins:

  • GND-Pin: Dieser muss mit GND (0 V) verbunden werden.
  • VCC-Pin: Dieser muss mit VCC (5 V) verbunden werden.
  • VRX-Pin: Dieser gibt einen analogen Wert aus, der der horizontalen Position entspricht (als X-Koordinate bekannt).
  • VRY-Pin: Dieser gibt einen analogen Wert aus, der der vertikalen Position entspricht (als Y-Koordinate bekannt).
  • SW-Pin: Dies ist die Ausgabe des Druckknopfs im Joystick. Er ist normalerweise offen. Wenn an diesem Pin ein Pull-up-Widerstand verwendet wird, ist der SW-Pin HIGH, wenn er nicht gedrückt ist, und LOW, wenn er gedrückt wird.
Joystick-Pinbelegung

Wie es funktioniert

  • Wenn Sie den Daumenstick des Joysticks nach links oder rechts bewegen, variiert die Spannung am VRX-Pin von 0 bis 5 V, wobei 0 links und 5 V rechts entspricht, was zu einem Messwert am analogen Pin des Arduino von 0 bis 1023 führt.
  • Wenn Sie den Daumenstick des Joysticks nach oben oder unten bewegen, variiert die Spannung am VRY-Pin von 0 bis 5 V, wobei 0 oben und 5 V unten entspricht, was zu einem Messwert am analogen Pin des Arduino von 0 bis 1023 führt.
  • Wenn Sie den Daumenstick des Joysticks in irgendeine Richtung bewegen, ändert sich die Spannung sowohl am VRX- als auch am VRY-Pin proportional zur Projektion der Position auf jeder Achse.
  • Wenn Sie den Daumenstick des Joysticks von oben nach unten drücken, wird der im Joystick integrierte Drucktaster geschlossen. Wenn wir am SW-Pin einen Pull-up-Widerstand verwenden, ändert sich der Ausgang am SW-Pin von 5 V zu 0 V, wodurch sich der Messwert am digitalen Pin des Arduino von HIGH zu LOW ändert.

Verdrahtungsdiagramm

Arduino Nano Joystick-Schaltplan

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

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

So programmiert man für Joysticks

Der Joystick besteht aus zwei Komponenten: analog (X- und Y-Achse) und digital (Pushbutton):

  • Für die analogen Teile (X- und Y-Achse) lesen Sie einfach den Wert vom analogen Eingangspin mit der [analogRead()]-Funktion.
int value_X = analogRead(A6); int value_Y = analogRead(A7);
  • Für den digitalen Teil (Pushbutton): Es ist ein Knopf. Die einfachste und bequemste Möglichkeit, ihn zu verwenden, ist mit der ezButton-Bibliothek. Diese Bibliothek bietet Entprellung (Debounce) für Knöpfe sowie einen integrierten Pull-Up-Widerstand. Um mehr über Knöpfe zu erfahren, können Sie sich das Arduino Nano - Button-Tutorial ansehen. Der Code dafür wird in der nächsten Sitzung dieses Tutorials vorgestellt.

Nachdem wir die Werte von analogen Pins erhalten haben, müssen wir sie möglicherweise in steuerbare Werte umwandeln. Der folgende Abschnitt wird hierzu Beispielcodes bereitstellen.

Arduino Nano Quellcode

In diesem Abschnitt werden folgende Arduino Nano-Beispielcodes vorgestellt:

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

Liest analoge Werte vom Joystick

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.println(value_Y); delay(200); }

Schnelle Schritte

  • Kopieren Sie den Code und öffnen Sie ihn in der Arduino-IDE.
  • Klicken Sie auf die Hochladen-Schaltfläche, um den Code auf den Arduino Nano zu übertragen.
  • Drücken Sie den Joystick-Knopf ganz durch und drehen Sie ihn in einer kreisförmigen Bewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
  • Überprüfen Sie das Ergebnis im Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Während du den Daumenstick des Joysticks drehst, behalte den seriellen Monitor im Auge.

Wenn der X-Wert 0 ist, notieren Sie die aktuelle Position als links, wobei das Gegenstück rechts ist.

Wenn der Y-Wert 0 ist, notieren oder merken Sie sich die aktuelle Position als oben, wobei das Gegenteil davon unten ist.

Liest analoge Werte und den Knopfzustand von einem Joystick

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-joystick */ #include <ezButton.h> #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define SW_PIN 2 // The Arduino Nano pin connected to SW pin ezButton button(SW_PIN); int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis int bValue = 0; // The variable 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 value_X = analogRead(VRX_PIN); value_Y = 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(value_X); Serial.print(", y = "); Serial.print(value_Y); Serial.print(" : button = "); Serial.println(bValue); }

Schnelle Schritte

  • Klicken Sie auf das Bibliotheken Symbol in der linken Seitenleiste der Arduino IDE.
  • Suchen Sie nach „ezButton“ und finden Sie die Button-Bibliothek von ArduinoGetStarted.com.
  • Dann klicken Sie auf den Installieren-Button, um die ezButton-Bibliothek zu installieren.
Arduino Nano Tasterbibliothek
  • Kopieren Sie den Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie auf die Hochladen-Schaltfläche, um ihn an den Arduino Nano zu senden.
  • Bewegen Sie den Daumenstick des Joysticks in die Richtungen links, rechts, oben und unten.
  • Drücken Sie den Daumenstick von oben nach unten.
  • Schauen Sie sich das Ergebnis im Serial Monitor an.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Konvertiert einen analogen Wert in Befehle zum Bewegen nach links, rechts, oben und unten

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano 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 value_X = 0 ; // The variable to store value of the X axis int value_Y = 0 ; // The variable 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 value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands 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 // 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 Code und öffne ihn mit der Arduino-IDE.
  • Klicke in der IDE auf die Hochladen-Schaltfläche, um den Code auf den Arduino Nano zu übertragen.
  • Bewege den Joystick mit dem Daumen in jede Richtung.
  • Überprüfe die Ergebnisse im Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Zu jedem beliebigen Zeitpunkt könnte es keinen Befehl, einen Befehl oder zwei Befehle geben (z. B. UP und LEFT gleichzeitig).

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

Die Einzelheiten finden Sie im Tutorial mit dem Titel Arduino Nano - Joystick steuert Servomotor.

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!