LEDs mit einem Tas­ten­pad schalten

Lese­zeit: 5 Minu­ten
Seite als PDF
Navi­ga­ti­on

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
  • 5 Wider­stän­de > 100 Ω
  • Tas­ten­pad
  • 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)

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. 

Bin­de die ein­ge­bau­te Biblio­thek stdio.h ein, 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 die Abfrage von Wertebereichen muss
  # include <stdio.h>
  im Kopf eingebunden werden
*/
# include <stdio.h>

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

Für das Aus­le­sen der Tas­ter sind die Variablen …

int Taster; 
int Analogwert;

… zustän­dig.

Eine ➨int-Funktion 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 setup- 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 setup-Teil weist mit einer ➨for-Schleife 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]
    . . . 
    . . .   
  }   
  
  // Taster rechts
  if (Taster == 4)   
  { 
    // weiße LED Pin 4, LED[1] Status[1]
    . . . 
    . . .   
  }   

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

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 4. Apr 2021 @ 19:55