Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche tiefer in Raspberry Pi, Arduino und ESP32 zusammen mit anderen Enthusiasten ein.
Warum beitreten?
Expertenunterstützung: Löse nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalte vorab Zugang zu neuen Produktankündigungen und Einblicken.
Spezielle Rabatte: Genieße exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nimm an Gewinnspielen und Feiertagspromotionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicke [hier] und tritt noch heute bei!
13. Joystick-LED-Navigator
Wenn du an einen Daumen-Joystick denkst, kommt dir wahrscheinlich ein Game-Controller in den Sinn. Allerdings sind diese vielseitigen Geräte nicht nur fürs Gaming geeignet, sondern auch für verschiedene DIY-Elektronikprojekte. Sie können verwendet werden, um Roboter oder Rover zu steuern oder sogar Kamerabewegungen zu verwalten.
In diesem praxisorientierten Kurs lernst du, wie du einen Joystick mit einem Arduino verbindest, um LEDs entsprechend den Bewegungen des Joysticks zu steuern. Wir werden die Funktionsweise des Joysticks untersuchen, den seriellen Monitor nutzen, um Ausgaben zu lesen und zu debuggen, und Kontrolllogik entwickeln, um LEDs in bestimmte Richtungen zu aktivieren. Dieser Kurs legt Wert auf praktische Anwendungen, die direkt auf reale Szenarien anwendbar sind, bei denen präzise Richtungssteuerung entscheidend ist.
Am Ende dieses Kurses wirst du in der Lage sein:
Die Funktionsweise eines Joysticks und dessen verschiedene Ausgaben (X, Y und SW) zu verstehen.
Den seriellen Monitor zu verwenden, um Sensorwerte in Arduino zu lesen und zu debuggen.
Bedingte Anweisungen (
if-else if
) zu schreiben und zu verstehen, um Hardware basierend auf Eingabewerten zu steuern.
Baue die Schaltung
Benötigte Komponenten
1 * Arduino Uno R3 |
4 * LEDs in verschiedenen Farben |
4 * 220Ω Widerstände |
1 * Joystick-Modul |
1 * USB-Kabel |
1 * Steckbrett |
Verbindungskabel |
|
Bauanleitung
Folge dem Schaltplan oder den folgenden Schritten, um deine Schaltung zu bauen.

Finde ein Joystick-Modul.
Ein Joystick-Modul, auch als Joystick-Sensor bekannt, ist ein Eingabegerät, das die Bewegung eines Knopfes in zwei Richtungen misst, horizontal (X-Achse) und vertikal (Y-Achse).

GND: Verbindet mit Masse.
+5V: Versorgt das Modul mit Strom, kompatibel mit 3,3V bis 5V.
VRX: Gibt analoge Werte aus, die die Position der X-Achse darstellen.
VRY: Gibt analoge Werte aus, die die Position der Y-Achse darstellen.
SW: Gibt ein digitales Signal aus, wenn der Joystick-Knopf gedrückt wird. Für einen zuverlässigen Betrieb sollte ein externer Pull-up-Widerstand verwendet werden, der den SW-Pin im Ruhezustand auf High hält und bei Betätigung auf Low setzt.
Der Joystick arbeitet auf Basis des Widerstandswechsels zweier Potentiometer (normalerweise 10 Kiloohm). Durch Ändern des Widerstands in X- und Y-Richtung empfängt der Arduino unterschiedliche Spannungen, die in X- und Y-Koordinaten umgewandelt werden. Der Prozessor benötigt eine ADC-Einheit, um die analogen Werte des Joysticks in digitale Werte umzuwandeln und die notwendige Verarbeitung durchzuführen.
Arduino-Boards verfügen über sechs 10-Bit-ADC-Kanäle. Das bedeutet, dass die Referenzspannung des Arduino (5 Volt) in 1024 Segmente unterteilt wird. Wenn sich der Joystick entlang der X-Achse bewegt, steigt der ADC-Wert von 0 auf 1023, wobei der Wert 512 in der Mitte liegt. Das Bild unten zeigt den ungefähren ADC-Wert basierend auf der Joystick-Position.

Der Joystick verfügt außerdem über eine Druckfunktion nach innen, ähnlich einem Knopf, die sich zum Auswählen von Menüoptionen oder anderen interaktiven Elementen eignet.

Hier ist, wie du jeden Pin des Joystick-Moduls mit dem Arduino Uno R3 verbindest:
Arduino Uno R3 |
Joystick |
GND |
GND (Masseanschluss des Steckbretts) |
+5V |
+5V |
VRX |
A0 |
VRY |
A1 |
SW |
Pin 2 |

Setze vier unterschiedlich farbige LEDs in das Steckbrett ein. Verbinde die Kathode (kurzer Pin) jeder LED mit der Masseleitung des Steckbretts und die Anode (langer Pin) in bestimmte Ports (58A, 53A, 49A und 45A).

Setze einen 220-Ohm-Widerstand in die gleiche Reihe wie die Anode jeder LED ein, um die LEDs vor übermäßigem Strom zu schützen.

Verwende ein Verbindungskabel, um das Loch 58J auf dem Steckbrett mit Pin 11 des Arduino zu verbinden, damit die erste LED gesteuert werden kann.

Verbinde entsprechend die anderen drei LEDs mit den Pins 10, 9 und 8 des Arduino.

Vergiss nicht, deine Schaltung zu erden. Verbinde den GND-Pin des Arduino Uno R3 mit der Masseleitung des Steckbretts und verwende ein Verbindungskabel, um beide Masseleitungen auf dem Steckbrett zu verbinden.

Code-Erstellung - Werte vom Joystick-Modul lesen
Schauen wir uns an, welche Werte die X-Achse, Y-Achse und der Button des Joystick-Moduls ausgeben. Dafür verwenden wir ein Tool namens Serial Monitor.
Der Serial Monitor ist ein unverzichtbares Werkzeug beim Erstellen von Arduino-Projekten. Er kann als Debugging-Tool verwendet werden, um Konzepte zu testen oder direkt mit der Arduino-Platine zu kommunizieren.
Öffne die Arduino IDE und starte ein neues Projekt, indem du im Menü „Datei“ die Option „Neuer Sketch“ auswählst.
Speichere deinen Sketch unter dem Namen
Lesson13_Joystick_Module
mitStrg + S
oder durch Klicken auf „Speichern“.Erstelle drei Variablen, um die Werte von den drei Pins des Joystick-Moduls zu speichern.
const int xPin = A0; // Verbindung zu VRX
const int yPin = A1; // Verbindung zu VRY
const int swPin = 2; // Verbindung zu SW
void setup() {
// Hauptcode hier, der wiederholt ausgeführt wird:
}
Verwende außerdem die Pull-up-Funktion der Arduino-Software, um den
swPin
als Eingang festzulegen und ihn gleichzeitig alsPULLUP
zu aktivieren.
const int xPin = A0; // Verbindung zu VRX
const int yPin = A1; // Verbindung zu VRY
const int swPin = 2; // Verbindung zu SW
void setup() {
// Hauptcode hier, der wiederholt ausgeführt wird:
pinMode(swPin, INPUT_PULLUP); // swPin als Eingang mit internem Pull-up-Widerstand festlegen
}
Um den Serial Monitor zu aktivieren, musst du die serielle Kommunikation auf deinem Arduino Uno R3 einrichten. Dies geschieht normalerweise im Abschnitt
void setup()
deines Sketches mit dem BefehlSerial.begin(baud)
. Hierbei gibtbaud
die Übertragungsrate pro Sekunde zwischen dem Computer und dem Arduino Uno R3 an, wobei übliche Raten 9600 und 115200 Bits pro Sekunde sind.
const int xPin = A0; // Verbindung zu VRX
const int yPin = A1; // Verbindung zu VRY
const int swPin = 2; // Verbindung zu SW
void setup() {
// Code zum einmaligen Ausführen
pinMode(swPin, INPUT_PULLUP); // swPin als Eingang mit internem Pull-up-Widerstand festlegen
Serial.begin(9600); // Serielle Kommunikation mit einer Baudrate von 9600 starten
}
Erstelle nun drei Variablen
xValue
,yValue
undswValue
, um die Werte von den X-, Y- und SW-Pins zu speichern.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
}
Du bist jetzt bereit, den Serial Monitor zu verwenden, um Daten auszugeben. Du verwendest
Serial.print()
, um Daten und andere Texte anzuzeigen.
Hier ist, wie es geht:
Serial.print(val)
oderSerial.print(val, format)
: Gibt Daten als menschenlesbaren ASCII-Text an den seriellen Port aus.
- Parameter
Serial
: serielle Portobjekt.
val
: der zu druckende Wert. Erlaubte Datentypen: jeder Datentyp.- Rückgabewert
print()
gibt die Anzahl der geschriebenen Bytes zurück, das Lesen dieser Zahl ist jedoch optional. Datentyp: size_t.
Dieser Befehl kann verschiedene Datentypen und Formate darstellen, darunter Zahlen, Gleitkommazahlen, Bytes und Zeichenketten. Zum Beispiel:
Serial.print(78); // gibt "78" aus
Serial.print(78, BIN); // gibt "1001110" aus
Serial.print(1.23456); // gibt "1.23" aus
Serial.print(1.23456, 0); // gibt "1" aus
Serial.print('N'); // gibt "N" aus
Serial.print("Hello world."); // gibt "Hello world." aus
Verwende nun diesen Befehl, um eine Eingabeaufforderung auszugeben, die angibt, welche Daten gedruckt werden. Dies ist hilfreich, um mehrere Datendrucke gleichzeitig zu unterscheiden.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
Serial.print("X: ");
}
Gib als nächstes den Wert des VRX-Pins des Joystick-Moduls aus.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
Serial.print("X: ");
Serial.print(xValue); // Wert von VRX ausgeben
}
Verwende dieselbe Methode, um die Werte der VRY- und SW-Pins auszugeben.
Bemerkung
Um sicherzustellen, dass jede Ausgabe im Serial Monitor in einer neuen Zeile erscheint, verwende
Serial.println()
für den SW-Pin-Wert, der ein Zeilenumbruchzeichen am Ende der Druckanweisung hinzufügt.Mit
delay(100)
wird ein Zeitintervall festgelegt, bevor die nächste Datenmenge erscheint. Es wird empfohlen, beim Drucken von Daten an den Serial Monitor eine Verzögerung hinzuzufügen, um zu verhindern, dass er zu schnell aktualisiert wird und möglicherweise abstürzt.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
Serial.print("X: ");
Serial.print(xValue); // Wert von VRX ausgeben
Serial.print(" | Y: ");
Serial.print(yValue); // Wert von VRY ausgeben
Serial.print(" | SW: ");
Serial.println(swValue); // Wert von SW ausgeben
delay(100);
}
Der vollständige Code wird unten angezeigt. Du kannst nun auf Hochladen klicken, um den Code auf dein Arduino Uno R3 zu übertragen.
const int xPin = A0; // Verbindung zu VRX
const int yPin = A1; // Verbindung zu VRY
const int swPin = 2; // Verbindung zu SW
void setup() {
// Einmaliger Setup-Code:
pinMode(swPin, INPUT_PULLUP); // Setze swPin als Eingang mit internem Pull-up-Widerstand
Serial.begin(9600); // Starte serielle Kommunikation mit einer Baudrate von 9600
}
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
Serial.print("X: ");
Serial.print(xValue); // Wert von VRX ausgeben
Serial.print(" | Y: ");
Serial.print(yValue); // Wert von VRY ausgeben
Serial.print(" | SW: ");
Serial.println(swValue); // Wert von SW ausgeben
delay(100);
}
Klicke anschließend auf die Schaltfläche „Serial Monitor“ oben rechts in der Arduino IDE.

Wenn du unleserliche Daten siehst, musst du die Baudrate anpassen, um sie mit der im Code eingestellten Baudrate abzugleichen.

Nachdem der Code hochgeladen wurde, bewege den Joystick, und du wirst bemerken, dass sich die X- und Y-Werte zwischen 0 und 1023 ändern. Drücke und lasse den Joystick los und beobachte, wie der SW-Pin zwischen 0 und 1 wechselt.
X: 617 | Y: 1022 | SW: 1
X: 767 | Y: 1023 | SW: 1
X: 1022 | Y: 1022 | SW: 1
X: 516 | Y: 522 | SW: 1
X: 516 | Y: 522 | SW: 1
X: 517 | Y: 524 | SW: 1
X: 517 | Y: 524 | SW: 1
Jetzt, da du weißt, wie man Daten im Serial Monitor ausgibt, lassen uns einige Schaltflächen im Serial Monitor erkunden:

Autoscroll umschalten: Dadurch wird das Scrollen der Daten aktiviert, sodass du immer die neuesten Messwerte siehst.
Zeitstempel umschalten: Aktiviere Zeitstempel, um die Daten mit der genauen Uhrzeit in Sekunden zu versehen.
Ausgabe löschen: Dies dient dazu, die aktuell angezeigten Daten auf dem Bildschirm zu löschen.
Fragen
Die X- und Y-Achsen des Joystick-Moduls geben analoge Werte zurück, während der SW-Pin einen digitalen Wert zurückgibt. In den vorherigen Schritten haben wir diese Werte bereits im Serial Monitor gesehen.
Bitte fasse die Unterschiede zwischen digitalen und analogen Werten in der Arduino-Programmierung zusammen.
Code-Erstellung - LEDs basierend auf Joystick-Bewegungen steuern
In diesem Tutorial wird beschrieben, wie man LEDs programmiert, um auf die Bewegungen eines Joysticks zu reagieren.

Richte jede LED so ein, dass sie die Richtung der Joystick-Bewegung anzeigt:
Hoch-Anzeige: Verbinde eine LED mit Pin 10. Sie leuchtet auf, wenn der Joystick nach oben gedrückt wird (Y-Achsen-Wert sinkt).
Runter-Anzeige: Verbinde eine LED mit Pin 9. Sie leuchtet auf, wenn der Joystick nach unten gedrückt wird (Y-Achsen-Wert steigt).
Links-Anzeige: Verbinde eine LED mit Pin 11. Sie leuchtet auf, wenn der Joystick nach links gedrückt wird (X-Achsen-Wert sinkt).
Rechts-Anzeige: Verbinde eine LED mit Pin 8. Sie leuchtet auf, wenn der Joystick nach rechts gedrückt wird (X-Achsen-Wert steigt).
Dies wirft die Frage auf: Wie weiß der Arduino Uno R3, in welche Richtung du den Joystick bewegst?
Idealerweise sollten die Werte, wenn der Joystick zentriert ist, (1024/2=512) betragen. Um also festzustellen, ob der Joystick nach oben, unten, links oder rechts gedrückt wird, prüfen wir einfach, ob die Werte größer oder kleiner als 512 sind.
Aufgrund möglicher Konstruktionsungenauigkeiten im Modul oder Widerstände in den Verbindungen können die Werte jedoch auch dann von 512 abweichen, wenn der Joystick zentriert ist. Dies könnte dazu führen, dass der Arduino Uno R3 die linke LED fälschlicherweise aktiviert, wenn der X-Wert bereits unter 512 liegt, ohne dass eine tatsächliche Bewegung stattgefunden hat.
Daher wird ein Schwellenwert um den Mittelpunkt (512±100) verwendet:

Hoch: Y-Achsen-Wert kleiner als 412.
Runter: Y-Achsen-Wert größer als 612.
Links: X-Achsen-Wert kleiner als 412.
Rechts: X-Achsen-Wert größer als 612.
Beginne nun mit dem Schreiben des Sketches. Öffne den zuvor gespeicherten Sketch
Lesson13_Joystick_Module
. Wähle im Menü „Datei“ die Option „Speichern unter…“ und benenne ihn inLesson13_Joystick_Module_LEDs
um. Klicke auf „Speichern“.Initialisiere Variablen, um die vier LEDs zu definieren.
// Definiere Pins für die LEDs
const int ledLeft = 11;
const int ledRight = 8;
const int ledUp = 10;
const int ledDown = 9;
// Definiere Pins für den Joystick
const int xPin = A0; // Verbindung zu VRX
const int yPin = A1; // Verbindung zu VRY
const int swPin = 2; // Verbindung zu SW
void setup() {
// Hauptcode hier, der wiederholt ausgeführt wird:
}
Setze nun im
void setup()
alle vier LED-Pins auf Ausgang.
void setup() {
// Initialisiere LED-Pins als Ausgänge
pinMode(ledLeft, OUTPUT);
pinMode(ledRight, OUTPUT);
pinMode(ledUp, OUTPUT);
pinMode(ledDown, OUTPUT);
pinMode(swPin, INPUT_PULLUP); // Setze swPin als Eingang mit internem Pull-up-Widerstand
Serial.begin(9600); // Starte serielle Kommunikation mit einer Baudrate von 9600
}
In diesem Projekt müssen wir die Joystick-Werte nicht ständig überprüfen, also wähle die fünf Zeilen
Serial.print()
aus und drückeStrg + /
, um sie zu kommentieren.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
// Serial.print("X: ");
// Serial.print(xValue); // Wert von VRX ausgeben
// Serial.print(" | Y: ");
// Serial.print(yValue); // Wert von VRY ausgeben
// Serial.print(" | SW: ");
// Serial.println(swValue); // Wert von SW ausgeben
// Füge eine kleine Verzögerung hinzu, um die Messwerte zu stabilisieren
delay(100);
}
Bevor du die entsprechende LED gemäß der Bewegung des Joysticks einschaltest, schalte zuerst alle vier LEDs aus.
void loop() {
// Joystick-Werte auslesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
// Serial.print("X: ");
// Serial.print(xValue); // Wert von VRX ausgeben
// Serial.print(" | Y: ");
// Serial.print(yValue); // Wert von VRY ausgeben
// Serial.print(" | SW: ");
// Serial.println(swValue); // Wert von SW ausgeben
// Zuerst schalte alle LEDs aus
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
// Füge eine kleine Verzögerung hinzu, um die Messwerte zu stabilisieren
delay(100);
}
Um jede LED nacheinander basierend auf den X- und Y-Werten des Joystick-Moduls zu aktivieren, benötigst du mehrere Bedingungen. Du kannst
if
verwenden, um Aktionen für verschiedene Bereiche der Potentiometerwerte festzulegen:
Wenn der Y-Achsen-Wert kleiner als 412 ist, sollte die „Up“-Anzeige leuchten.
Wenn der Y-Achsen-Wert größer als 612 ist, sollte die „Down“-Anzeige leuchten.
Wenn der X-Achsen-Wert kleiner als 412 ist, sollte die „Left“-Anzeige leuchten.
Wenn der X-Achsen-Wert größer als 612 ist, sollte die „Right“-Anzeige leuchten.
Das getrennte Verwalten dieser Bedingungen kann jedoch ineffizient sein, da Arduino bei jedem Schleifendurchlauf jede einzelne Bedingung überprüfen muss.
Um dies zu optimieren, verwende die if-else if
-Struktur:
if (Bedingung 1) {
// Ausführen, wenn Bedingung 1 wahr ist
}
else if (Bedingung 2) {
// Ausführen, wenn Bedingung 2 wahr ist
}
else if (Bedingung 3) {
// Ausführen, wenn Bedingung 3 wahr ist
}
else {
// Ausführen, wenn keine der Bedingungen wahr ist
}

In einer if-else if
-Struktur wird die erste Bedingung geprüft. Wenn sie wahr ist, werden die zugehörigen Befehle ausgeführt und alle anderen Bedingungen übersprungen (selbst wenn einige davon ebenfalls wahr sind). Ist die erste Bedingung falsch, wird die zweite Bedingung geprüft. Ist diese wahr, werden die zugehörigen Befehle ausgeführt, und die restlichen Bedingungen werden übersprungen. Wenn sie falsch ist, wird die nächste Bedingung geprüft und so weiter. In einigen Szenarien können mehrere Bedingungen gleichzeitig wahr sein. Daher ist die Reihenfolge der Bedingungen wichtig. Nur die erste wahre Bedingung wird ausgeführt.
Zuerst, wenn der
yValue
kleiner als 412 ist, verwende diedigitalWrite()
-Funktion, um die „Up“-Anzeige aufHIGH
zu setzen und einzuschalten.
// Zuerst alle LEDs ausschalten
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
}
Füge eine
else if
-Anweisung hinzu, um die „Down“-Anzeige zu aktivieren, wenn deryValue
612 überschreitet.
// Zuerst alle LEDs ausschalten
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
}
else if (yValue > 612) {
// Joystick nach unten
digitalWrite(ledDown, HIGH);
}
Um die „Left“-Anzeige zu aktivieren, wenn der
xValue
unter 412 liegt, füge eine weitereelse if
-Bedingung ein:
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
} else if (yValue > 612) {
// Joystick nach unten
digitalWrite(ledDown, HIGH);
} else if (xValue < 412) {
// Joystick nach links
digitalWrite(ledLeft, HIGH);
}
Füge ähnlich eine weitere
else if
-Bedingung hinzu, um die „Right“-Anzeige zu aktivieren, wenn derxValue
612 überschreitet.
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
} else if (yValue > 612) {
// Joystick nach unten
digitalWrite(ledDown, HIGH);
} else if (xValue < 412) {
// Joystick nach links
digitalWrite(ledLeft, HIGH);
} else if (xValue > 612) {
// Joystick nach rechts
digitalWrite(ledRight, HIGH);
}
Schließlich soll im
else
-Block mithilfe vondigitalWrite()
alle vier LEDs ausgeschaltet werden. Dieser Block enthält die Befehle, die ausgeführt werden, wenn keine der anderen Bedingungen zutrifft.
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
} else if (yValue > 612) {
// Joystick nach unten
digitalWrite(ledDown, HIGH);
} else if (xValue < 412) {
// Joystick nach links
digitalWrite(ledLeft, HIGH);
} else if (xValue > 612) {
// Joystick nach rechts
digitalWrite(ledRight, HIGH);
} else {
// Joystick in der Mitte, alle LEDs ausschalten
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
}
Dein vollständiger Code sieht wie folgt aus. Klicke auf „Upload“, um den Code auf dein Arduino Uno R3 zu übertragen.
// Pins für die LEDs definieren
const int ledLeft = 11;
const int ledRight = 8;
const int ledUp = 10;
const int ledDown = 9;
// Pins für den Joystick definieren
const int xPin = A0; // VRX angeschlossen an
const int yPin = A1; // VRY angeschlossen an
const int swPin = 2; // SW angeschlossen an
void setup() {
// LED-Pins als Ausgänge initialisieren
pinMode(ledLeft, OUTPUT);
pinMode(ledRight, OUTPUT);
pinMode(ledUp, OUTPUT);
pinMode(ledDown, OUTPUT);
pinMode(swPin, INPUT_PULLUP); // Setze den SW-Pin als Eingang mit internem Pull-Up-Widerstand
Serial.begin(9600); // Beginne serielle Kommunikation mit einer Baudrate von 9600
}
void loop() {
// Joystick-Werte lesen
int xValue = analogRead(xPin);
int yValue = analogRead(yPin);
int swValue = digitalRead(swPin);
// Serial.print("X: ");
// Serial.print(xValue); // Wert von VRX ausgeben
// Serial.print(" | Y: ");
// Serial.print(yValue); // Wert von VRY ausgeben
// Serial.print(" | SW: ");
// Serial.println(swValue); // Wert von SW ausgeben
// Zuerst alle LEDs ausschalten
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
// Joystick-Positionen prüfen und LEDs entsprechend setzen
if (yValue < 412) {
// Joystick nach oben
digitalWrite(ledUp, HIGH);
} else if (yValue > 612) {
// Joystick nach unten
digitalWrite(ledDown, HIGH);
} else if (xValue < 412) {
// Joystick nach links
digitalWrite(ledLeft, HIGH);
} else if (xValue > 612) {
// Joystick nach rechts
digitalWrite(ledRight, HIGH);
} else {
// Joystick in der Mitte, alle LEDs ausschalten
digitalWrite(ledLeft, LOW);
digitalWrite(ledRight, LOW);
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, LOW);
}
// Kleine Verzögerung einfügen, um die Stabilität der Messungen zu verbessern
delay(100);
}
Bewege jetzt den Joystick, und du wirst sehen, dass die entsprechenden Richtungs-LEDs aufleuchten.
Up-Indikator leuchtet, wenn der Joystick nach oben gedrückt wird (Y-Achsen-Wert sinkt).
Down-Indikator leuchtet, wenn der Joystick nach unten gedrückt wird (Y-Achsen-Wert steigt).
Left-Indikator leuchtet, wenn der Joystick nach links gedrückt wird (X-Achsen-Wert sinkt).
Right-Indikator leuchtet, wenn der Joystick nach rechts gedrückt wird (X-Achsen-Wert steigt).
Fragen
Im letzten Code haben wir die LEDs entsprechend den X- und Y-Werten des Joysticks gesteuert. Wie würdest du den Code anpassen, um die Helligkeit dieser LEDs zu regulieren, während sie leuchten?
Was ist der Unterschied im Verhalten der an Pin 8 angeschlossenen LED im Vergleich zu denen an den anderen Pins und warum?
Zusammenfassung
In dieser Lektion hast du die Funktionsweise des Joystick-Moduls kennengelernt und das Serial Monitor-Tool verwendet, um X-, Y- und SW-Werte vom Joystick auszulesen. Du hast die Unterschiede zwischen analogen und digitalen Werten in der Arduino-Programmierung verstanden. Zusätzlich hast du den Einsatz fortgeschrittener bedingter Anweisungen, insbesondere der if-else if-Konstrukte, zur Steuerung von Hardware basierend auf Eingabewerten gemeistert.