In diesem Tutorial werden wir lernen, wie man einen Joystick mit Arduino verwendet. Im Detail werden wir lernen:
Wie ein Joystick funktioniert
Wie man einen Joystick an Arduino anschließt und dafür programmiert
Wie man die Werte vom Joystick in steuerbare Werte umwandelt, z. B. XY-Koordinaten, die Auf- und Abwärtsrichtung sowie die Links- und Rechtsrichtung des Motors ...
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.
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
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 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
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
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 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 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.
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
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
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 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
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
※ 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
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. Beachte, dass das Video Arduino Uno R4 zeigt, funktioniert aber identisch für Arduino Uno R3:
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!