Leucht­stär­ke von LEDs mit einem Joy­stick regeln

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Wird der Joy­stick in der ver­ti­ka­len X-Ach­se nach vor­ne bewegt, wird die rote LED mit­hil­fe der ➨Puls­wei­ten­mo­du­la­ti­on lang­sam hel­ler.
Die Bewe­gung des Joy­sticks auf der X-Ach­se ver­rin­gert die Hel­lig­keit der roten LED. Die Bewe­gung der hori­zon­ta­len Y-Ach­se nach rechts sorgt dafür, dass die grü­ne LED hel­ler wird, die Bewe­gung nach links ver­dun­kelt die grü­ne LED.

Ein Druck auf den Knopf schal­tet bei­de LEDs aus.

So sieht es aus:

Der Joy­stick besteht aus zwei Poten­tio­me­tern, jeweils einer für die X-Ach­se und einer für die Y-Ach­se. Bei­de lesen bei den Bewe­gun­gen des Joy­sticks die Span­nung an den ver­wen­de­ten ana­lo­gen Pins. Die­se Span­nung wird in einem digi­tal-ana­log-Wand­ler in Wer­te zwi­schen 0 und 1023 umgewandelt.

Die Wer­te kön­nen je nach Joy­stick leicht nach oben oder unten abwei­chen.
Die Beschrif­tung und die Rei­hen­fol­ge der Pins kön­nen sich je nach Joy­stick unterscheiden.

Ach­seBezeich­nungAnschluss
X-Ach­seVRx/VERA0
Y-Ach­seVRy/HORA1
But­tonSW/SEL7

Benö­tig­te Bauteile:

  • 2 LEDs
  • 2 Wider­stän­de 220 Ω
  • Joy­stick
  • Lei­tungs­dräh­te

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Defi­nie­re 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 set­up-Teil wird neben den LEDs auch der pin­Mo­de des But­tons definiert:

void setup() 
{ 
  pinMode(ROT, OUTPUT); 
  pinMode(GRUEN, OUTPUT); 
  pinMode(JoystickButton, INPUT_PULLUP); 
}
Download

Der loop-Teil. Beach­te 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); 
  }
} 

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 9. Okt 2023 @ 7:19