Wird der Joystick in der vertikalen X-Achse nach vorne bewegt, wird die rote LED mithilfe der ⇒Pulsweitenmodulation langsam heller.
Die Bewegung des Joysticks auf der X-Achse verringert die Helligkeit der roten LED. Die Bewegung der horizontalen Y-Achse nach rechts sorgt dafür, dass die grüne LED heller wird, die Bewegung nach links verdunkelt die grüne LED.
Ein Druck auf den Knopf schaltet beide LEDs aus.
So sieht es aus:
Der Joystick besteht aus zwei Potentiometern, jeweils einer für die X-Achse und einer für die Y-Achse. Beide lesen bei den Bewegungen des Joysticks die Spannung an den verwendeten analogen Pins. Diese Spannung wird in einem digital-analog-Wandler in Werte zwischen 0 und 1023 umgewandelt.
Die Werte können je nach Joystick leicht nach oben oder unten abweichen.
Die Beschriftung und die Reihenfolge der Pins können sich je nach Joystick unterscheiden.
Achse | Bezeichnung | Anschluss |
---|---|---|
X-Achse | VRx/VER | A0 |
Y-Achse | VRy/HOR | A1 |
Button | SW/SEL | 7 |
Benötigte Bauteile:
- 2 LEDs
- 2 Widerstände 220 Ω
- Joystick
- Leitungsdrähte
Beachte die ⇒Vorwiderstände verschiedener LEDs
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Definiere zunächst die Variablen:
// PWM-Pins
int GRUEN = 5;
int ROT = 6;
// Button/Knopf
int JoystickButton = 7;
// analoge Pins
int XAchse = A0;
int YAchse = A1;
// Variablen für die Auswertung der Bewegung des Joysticks
int PositionX;
int PositionY;
// Leuchstärke der LEDs (0-255)
int LeuchtStaerkeRot;
int LeuchtStaerkeGruen;
// Zustand des Buttons
int ButtonLesen;
Im setup-Teil wird neben den LEDs auch der pinMode des Buttons definiert:
void setup()
{
pinMode(ROT, OUTPUT);
pinMode(GRUEN, OUTPUT);
pinMode(JoystickButton, INPUT_PULLUP);
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
// Bewegung der X-Achse lesen
PositionX = analogRead(XAchse);
// Bewegung X-Achse nach oben
if (PositionX > 600)
{
// bei der PWM darf die Leuchstärke 255 nicht übersteigen
if (LeuchtStaerkeRot < 255)
{
// Helligkeit um 1 erhöhen
LeuchtStaerkeRot = LeuchtStaerkeRot + 1;
// rote LED einschalten
analogWrite(ROT, LeuchtStaerkeRot);
delay(20);
}
}
// Bewegung X-Achse nach unten
if (PositionX < 300)
{
// solange die Helligkeit > 0
// -> Helligkeit um 1 verringern
if (LeuchtStaerkeRot > 0)
{
LeuchtStaerkeRot = LeuchtStaerkeRot - 1;
analogWrite(ROT, LeuchtStaerkeRot);
delay(20);
}
}
// Bewegung der Y-Achse lesen
PositionY = analogRead(YAchse);
// Bewegung Y-Achse nach rechts
if (PositionY > 600)
{
if (LeuchtStaerkeGruen < 255)
{
LeuchtStaerkeGruen = LeuchtStaerkeGruen + 1;
analogWrite(GRUEN, LeuchtStaerkeGruen);
delay(20);
}
}
// Bewegung Y-Achse nach links
if (PositionY < 300)
{
if (LeuchtStaerkeGruen > 0)
{
LeuchtStaerkeGruen = LeuchtStaerkeGruen - 1;
analogWrite (GRUEN, LeuchtStaerkeGruen);
delay(20);
}
}
// Button/Knopf auswerten
ButtonLesen = digitalRead(JoystickButton);
if (ButtonLesen == LOW)
{
// Helligkeit der LEDs auf 0 setzen und LEDs ausschalten
LeuchtStaerkeGruen = 0;
LeuchtStaerkeRot = 0;
analogWrite(ROT, 0);
analogWrite(GRUEN, 0);
}
}
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 einem Joystick-Shield schalten
- 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: