LEDs mit einem Tas­ten­pad schalten

Lese­zeit: 5 Minu­ten

Lösung
Seite als PDF

Jeder Tas­te des Tas­ten­pads ist eine far­bi­ge LED zuge­ord­net. Wird die ent­spre­chen­de Tas­te gedrückt, leuch­tet die LED. Ein erneu­ter Druck auf die Tas­te schal­tet die LED wie­der aus.

So sieht es aus:

Benö­tig­te Bauteile:

  • 5 LEDs
  • 3 Wider­stän­de 220 Ω (gel­be, rote und grü­ne LED)
  • 2 Wider­stän­de 100 Ω (blaue und wei­ße LED)
  • Tas­ten­pad
  • 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)

Die gedrück­te Tas­te wird durch die Mes­sung des ana­lo­gen Wer­tes ermit­telt. Lei­der kann die­ser Wert nur unge­fähr ange­ge­ben wer­den, so dass es beim lau­fen­den Pro­gramm gele­gent­lich zu nicht erwünsch­ten Effek­ten kom­men kann. 

Defi­nie­re ein ➨Array für die LEDs und eins für den aktu­el­len Sta­tus der LEDs. Sie sind beim Pro­gramm­start aus­ge­schal­tet (fal­se).
Für das Aus­le­sen der Tas­ter sind die Varia­blen Tas­ter und Ana­log­wert zuständig.

// Array für die LEDs
int LED[5] = {3, 4, 5, 6, 7}; 

/*
  Array für den Zustand der LEDs
  false = ausgeschaltet
*/
bool Status[5] = {false, false, false, false, false};
int Taster; 
int Analogwert;

Eine ➨int-Funk­ti­on erle­digt das Aus­le­sen des ana­lo­gen Werts. Eine Beson­der­heit ist hier das Abfra­gen des Wer­tes mit switch mit einem Wertebereich.

Den­ke dar­an, dass die Funk­ti­on Tas­ter­ab­fra­ge außer­halb des set­up- und des loop-Teils steht.

int Tasterabfrage() 
{ 
  Analogwert = analogRead(A0); 
  delay(200);    
  Serial.println(Analogwert);
  /* 
    A0 gibt je nach gedrückten Taster einen Wert aus  
    über den Seriellen Monitor wird dieser Wert angezeigt       
    und kann dann eventuell angepasst werden  
    die Zeile Serial.println ... kann dann gelöscht werden
    Taster 1 → links    
    Taster 2 → oben Mitte    
    Taster 3 → unten Mitte    
    Taster 4 → rechts    
    Taster 5 → außen   
  */  
  switch (Analogwert) 
  {   
    case 0 ... 20:   
      Taster = 1;  
      break;   
    
    case 30 ... 60:     
      Taster = 2;     
      break;   
    
    case  70 ... 120:   
      Taster = 3;     
      break;       
    
    case 150 ... 200:     
      Taster = 4;     
      break;   
    
    case 300 ... 400:    
      Taster = 5;   
      break;   
    
    default:      
      return 0;  
  }  

  // gedrückten Taster zurückgeben 
  return Taster; 
}

Der set­up-Teil weist mit einer ➨for-Schlei­fe jeder LED des Arrays den Wert OUTPUT zu.

void setup()
{
  for (int i = 0; i <= 4; i++) 
  {
    pinMode(LED[i], OUTPUT);
  }

  Serial.begin(9600);
}

Der loop-Teil fragt mit Hil­fe der Funk­ti­on Tas­ter­Ab­fra­ge den gedrück­ten Tas­ter ab:

void loop()
{
  Taster = Tasterabfrage();

  // Taster links
  if (Taster == 1)
  {
    /*
      gelbe LED Pin 7, LED[4] Status[4]
      Status umdrehen, aus true wird false
      aus false wird true
    */
    Status[4] = !Status[4];
    digitalWrite(LED[4], Status[4]);
  }

  // Taster oben Mitte
  if (Taster == 2)
  {
    // blaue LED Pin 6, LED[3] Status[3]
    Status[3] = !Status[3];
    digitalWrite(LED[3], Status[3]);
  }

  // Taster unten Mitte
  if (Taster == 3)
  {
    // rote LED Pin 5, LED[2] Status[2]
    Status[2] = !Status[2];
    digitalWrite(LED[2], Status[2]);
  }

  // Taster rechts
  if (Taster == 4)
  {
    // weiße LED Pin 4, LED[1] Status[1]
    Status[1] = !Status[1];
    digitalWrite(LED[1], Status[1]);
  }

  // Taster rechts außen
  if (Taster == 3)
  {
    // grüne LED Pin 3, LED[0] Status[0]
    Status[0] = !Status[0];
    digitalWrite(LED[0], Status[0]);
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 15. Okt 2023 @ 11:44