Mit einem Joystick-Shield sollen vier LEDs mit den Tastern geschaltet werden. Solange der Taster gedrückt wird, soll die LED leuchten. Der Joystick steuert ein Lauflicht nach links und nach rechts.
So sieht es aus:
Benötigte Bauteile:
- 4 weiße LEDs
- 4 Widerstände 100 Ω, 220 Ω bei roten, gelben oder grünen LEDs
- Joystick-Shield
- Leitungsdrähte
Das Joystick-Shield besitzt insgesamt sechs Taster, die mit den Buchstaben A bis E gekennzeichnet sind. Ein Joystick vervollständigt das Shield. Es wird einfach auf den Arduino aufgesteckt.
Das Joystick-Shield besitzt insgesamt sechs Taster, die mit den Buchstaben A bis E gekennzeichnet sind. Ein Joystick vervollständigt das Shield. Es wird einfach auf den Arduino aufgesteckt.
Die digitalen Pins D2 bis D8 sind mit den Tastern und dem Joystick-Knopf belegt. Die LEDs werden deshalb an den digitalen Pins D9 bis D12 angeschlossen. Der Joystick belegt die analogen Anschlüsse A0 und A1.
A0 liest die Werte auf der X-Achse, A1 die Werte auf der Y-Achse. Um die Bewegungen des Joysticks auszuwerten, reicht es aus, die Werte der jeweiligen Achsen abzufragen.
Als Erstes sollen die Taster mit ihrem Namen und die Bewegung des Joysticks im Seriellen Monitor angezeigt werden.
Das dazugehörige Programm:
// Array Taster
// Reihenfolge A B C D
int Taster[] = { 2, 3, 4, 5, 8 };
// Namen der Taster
String NameTaster[] = { "A", "B", "C", "D" };
// analoge Pins Joystick
byte XAchse = A0;
byte YAchse = A1;
void setup()
{
Serial.begin(9600);
// pinMode der 4 Taster festlegen: sizeof = Größe des Arrays
// INPUT_PULLUP -> Eingangspegel auf HIGH setzen
for (int i = 0; i <= sizeof(Taster); i++)
{
pinMode(Taster[i], INPUT_PULLUP);
}
}
void loop()
{
// Taster der Reihe nach abfragen
for (int i = 0; i < sizeof(Taster); i++)
{
// wenn der jeweilige Taster gedrückt wird
if (digitalRead(Taster[i]) == LOW)
{
// kurzes delay -> Prellen des Tasters verringern
delay(200);
// Name des Tasters zuordnen
Serial.println("Taste: " + NameTaster[i]);
}
}
// Bewegung der Y-Achse lesen
int PositionX = analogRead(XAchse);
// Bewegung X-Achse nach links
if (PositionX < 300)
{
delay(200);
Serial.println("Bewegung X-Achse nach links");
}
// Bewegung X-Achse nach rechts
if (PositionX > 600)
{
delay(200);
Serial.println("Bewegung X-Achse nach rechts");
}
// Bewegung der Y-Achse lesen
int PositionY = analogRead(YAchse);
// Bewegung Y-Achse nach oben
if (PositionY > 600)
{
delay(200);
Serial.println("Bewegung Y-Achse nach oben");
}
// Bewegung Y-Achse nach unten
if (PositionY < 300)
{
delay(200);
Serial.println("Bewegung Y-Achse nach unten");
}
}
Im Programm werden zwei ⇒Arrays verwendet.
Das Array mit int legt die digitalen Anschlüsse der Taster fest:
int Taster[] = { 2, 3, 4, 5 };
Das Array mit String bestimmt die Namen der Taster:
String NameTaster[] = { "A", "B", "C", "D" };
Die ⇒ for-Schleife startet mit 0 und fragt den Taster im Array an der Position 0 (Taster an D2) ab. Weil der Vorwiderstand eingeschaltet ist (INPUT_PULLUP) wird gefragt, ob der digital gelesene Wert LOW ist. Ist das der Fall, wird der Name des Tasters ausgegeben, der sich an der gleichen Position im Array befindet:
- Taster[0] wird NameTaster[0] zugeordnet: digitaler Pin D2 ⇒ A
- Taster[1] wird NameTaster[1] zugeordnet: digitaler Pin D3 ⇒ B
- Taster[2] wird NameTaster[2] zugeordnet: digitaler Pin D4 ⇒ C
- Taster[3] wird NameTaster[0] zugeordnet: digitaler Pin D5 ⇒ D
⇒sizeof bestimmt die Größe eines Arrays.
Der gelesene Wert des Tasters wird mit einer ⇒ if-Abfrage mit den Werten HIGH oder LOW verglichen.
Wenn er den Wert LOW hat, zeigt der Serielle Monitor den Namen des Tasters an.
Der Joystick wird ebenfalls mit einer if-Abfrage ausgewertet. Bei der Bewegung auf der X-Achse wird nur der Wert auf der X-Achse verglichen. Ist er kleiner als 300, wurde der Joystick nach links bewegt. Ist er größer als 600, wurde er nach rechts bewegt.
Auch die if-Abfrage der Y-Achse vergleicht nur die gelesenen Werte der Y-Achse.
// Array Taster
// Reihenfolge A B C D
byte Taster[] = { 2, 3, 4, 5, 8 };
// analoge Pins Joystick
byte XAchse = A0;
byte YAchse = A1;
// Array für die LEDs
byte LED[5] = { 9, 10, 11, 12 };
Im setup-Teil wird mit einer for-Schleife der pinMode für die LEDs ergänzt.
void setup()
{
// Seriellen Monitor starten
Serial.begin(9600);
// pinMode der 4 Taster festlegen: sizeof = Größe des Arrays
// INPUT_PULLUP -> Eingangspegel auf HIGH setzen
for (int i = 0; i <= sizeof(Taster); i++)
{
// INPUT_PULLUP -> Eingangspegel auf HIGH setzen
pinMode(Taster[i], INPUT_PULLUP);
}
// pinMode der LEDs festlegen
for (int i = 0; i < sizeof(LED); i++)
{
pinMode(LED[i], OUTPUT);
}
}
Innerhalb der for-Schleife wird jetzt die dem Taster zugeordnete LED eingeschaltet.
- Taster[0] wird LED[0] am digitalen Pin D9 zugeordnet
- Taster[1] wird LED[1] am digitalen Pin D10 zugeordnet
- Taster[2] wird LED[2] am digitalen Pin D11 zugeordnet
- Taster[3] wird LED[3] am digitalen Pin D12 zugeordnet
Die Abfrage der Bewegung des Joysticks wird mit dem Lauflicht ergänzt.
void loop()
{
// Zustand der Taster der Reihe nach abfragen
for (int i = 0; i < sizeof(Taster); i++)
{
// wenn der jeweilige Taster gedrückt wird
// wird der Zustand der jeweiligen LED true
// -> LED wird eingschaltet
if (digitalRead(Taster[i]) == LOW)
{
digitalWrite(LED[i], HIGH);
Serial.println("Taste: " + String(Taster[i]));
}
// wenn der Taster nicht gedrückt wurde
// -> LED bleibt ausgeschaltet
else digitalWrite(LED[i], LOW);
}
// Bewegung der Y-Achse lesen
int PositionX = analogRead(XAchse);
// Bewegung X-Achse nach links
// Lauflicht nach links,
// for-Schleife läuft rückwärts
if (PositionX > 600)
{
for (int i = 0; i < sizeof(LED); i++)
{
digitalWrite(LED[i], HIGH);
delay(200);
digitalWrite(LED[i], LOW);
}
}
// Bewegung X-Achse nach links
// Lauflicht nach links
if (PositionX < 300)
{
for (int i = sizeof(LED); i >= 0; i--)
{
digitalWrite(LED[i], HIGH);
delay(200);
digitalWrite(LED[i], LOW);
}
}
}
Verwandte Anleitungen:
- Blinkende LED
- Blinkende LED mit einem Potentiometer
- Blinkende LEDs mit Multithreading
- Farbe und Helligkeit eines LED-Streifens mit Potentiometern manipulieren
- Farbenspiele mit einem LED-Streifen
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Lauflicht
- Lauflicht mit blinkenden LEDs
- Wechselblinker mit einem Relais
- LEDs mit dem UDP-Protokoll im LAN schalten
- LEDs ohne Pulsweitenmodulation dimmen
- LEDs schalten mit PORT/DDR
- LEDs mit dem Schieberegister 74HC595 steuern
- LEDs mit einem Taster steuern
- Wechselblinker
- Würfeln mit LEDs
Letzte Aktualisierung: