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

Lese­zeit: 5 Minu­ten
Navi­ga­ti­on

Der Joy­stick besteht aus zwei Poten­tio­me­tern, jeweils einer für die X-Achse und einer für die Y-Achse. Bei­de lesen bei den Bewe­gun­gen die Span­nung und lie­fern dem Ardui­no jeweils einen ana­lo­gen Wert, der zwi­schen 0 und 1023 liegt.

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 unter­schei­den.

Ach­seBezeich­nungAnschluss
X-AchseVRx/VERA0
Y-AchseVRy/HORA1
But­tonSW/SEL7

Benö­tig­te Bau­tei­le:

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

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

Wird der Joy­stick in der ver­ti­ka­len X-Achse 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-Achse ver­rin­gert die Hel­lig­keit der roten LED. Die Bewe­gung der hori­zon­ta­len Y-Achse 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.

Defi­nie­re zunächst die Varia­blen:

// 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 pin­Mo­de des But­tons defi­niert:

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

Der loop-Teil:
Beach­te die Kom­men­ta­re.

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); 
  }
} 


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 13:25