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 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.
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
Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
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 pinint xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisvoidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// print data to Serial Monitor on Arduino IDESerial.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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
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 pinezButtonbutton(SW_PIN);int xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisint bValue = 0; // To store value of the buttonvoidsetup() {Serial.begin(9600) ;button.setDebounceTime(50); // set debounce time to 50 milliseconds}voidloop() {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 IDESerial.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.
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
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 0x08int xValue = 0 ; // To store value of the X axisint yValue = 0 ; // To store value of the Y axisintcommand = COMMAND_NO;voidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// converts the analog value to commands// reset commandscommand = COMMAND_NO;// check left/right commandsif (xValue < LEFT_THRESHOLD)command = command | COMMAND_LEFT;elseif (xValue > RIGHT_THRESHOLD)command = command | COMMAND_RIGHT;// check up/down commandsif (yValue < UP_THRESHOLD)command = command | COMMAND_UP;elseif (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 commandif (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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
※ 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
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.
Die folgende Video-Demo verwendet den folgenden Code:
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!