LEDs mit einem Tas­ten­pad schal­ten

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

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

  • 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.

Ein Tas­ten­druck schal­tet die ent­spre­chen­de LED ein, erneu­ter Tas­ten­druck schal­tet sie wie­der aus.

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 Varia­blen …

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 Wer­te­be­reich.

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]
    . . . 
    . . .   
  }   
} 


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 13:24