Nr.06 Taster am Mikrocontroller

Inhaltsverzeichnis

Eine LED per Tastendruck aktivieren

Aufgabe: Eine LED soll für 5 Sekunden leuchten, wenn ein Taster betätigt wurde.

Der Mikrocontroller kann an seinen digitalen Pins nicht nur Spannungen ausgeben, sondern auch auslesen. Dies möchten wir in diesem Programm ausprobieren. 

Bei dem Aufbau gibt es jedoch eine Besonderheit. Wenn man den Taster einfach nur mit dem Mikrocontroller verbindet, dann liegt an dem Pin des Mikrocontrollers eine Spannung an, sobald der Taster gedrückt wird. Man kann sich das so vorstellen, als würden an dem besagten Pin ganz viele Elektronen herumschwirren. Wenn der Taster dann losgelassen wird, kommen keine neuen Elektronen mehr zu dem Pin am Mikrocontroller hinzu.

Jetzt kommt der Knackpunkt. Die Elektronen, die es sich vorher auf dem Pin gemütlich gemacht haben, sind dann immer noch da und entweichen nur ganz langsam über kleine Kriechströme. Der Mikrocontroller denkt dann also, dass der Taster nicht nur kurz gedrückt wird, sondern dass er ganz lange gedrückt wird. Nämlich so lange, bis sich keine Elektronen mehr auf dem Pin aufhalten.

Dieses Problem kann man dadurch beheben, dass man den Pin über einen Widerstand mit ca. 1000 Ohm (1 K Ohm) erdet. Die Elektronen können dadurch recht schnell vom Pin abfließen und der Mikrocontroller erkennt, dass der Taster nur kurz „angetastet“ wurde. Da der Widerstand die Spannung an dem Eingangspin immer auf 0V „herunterzieht“, wird er auch als „PULLDOWN-“ Widerstand bezeichnet.

ACHTUNG: Wenn man dafür einen zu kleinen Widerstand verwendet, kann beim Drücken des Tasters ein Kurzschluss auf dem Mikrocontroller entstehen.

Schaltpläne

Der Programmcode

Arduino UNO

// LED an Pin 7, Taster an Pin 6
int LEDgelb = 6; 
int TasterGelb = 7;   

// speichert den Status der LED: 0 = aus, 1 = ein
int StatusGelb = 0;  

void setup()  
{
  // LED wird als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);   
  
  // der Taster wird als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
}

void loop() 
{  
  // Taster abfragen
  StatusGelb = digitalRead(TasterGelb); 

  // wenn der Taster gedrückt wurde
  if (StatusGelb == HIGH) 
  {      
    // LED für 5 Sekunden (5000 ms) einschalten                         
    digitalWrite(LEDgelb, HIGH); 
    delay(5000);  

    // LED ausschalten                
    digitalWrite(LEDgelb, LOW);   
  }                               
}

Wemos D1 Mini

// LED an Pin D6, Taster an Pin D8
int LEDgelb = D6; 
int TasterGelb = D8;   
     
// speichert den Status der LED: 0 = aus, 1 = ein
int StatusGelb = 0;  

void setup()  
{
  // LED wird als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);   
  
  // der Taster wird als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
}

void loop() 
{  
  // Taster abfragen
  StatusGelb = digitalRead(TasterGelb); 

  // wenn der Taster gedrückt wurde
  if (StatusGelb == HIGH) 
  {      
    // LED für 5 Sekunden (5000 ms) einschalten                         
    digitalWrite(LEDgelb, HIGH); 
    delay(5000);  

    // LED ausschalten                
    digitalWrite(LEDgelb, LOW);   
  }                               
}

NodeMCU

// LED an Pin D3, Taster an Pin D1
int LEDgelb = D3; 
int TasterGelb = D1;   
     
// speichert den Status der LED: 0 = aus, 1 = ein
int StatusGelb = 0;  

void setup()  
{
  // LED wird als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);   
  
  // der Taster wird als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
}

void loop() 
{  
  // Taster abfragen
  StatusGelb = digitalRead(TasterGelb); 

  // wenn der Taster gedrückt wurde
  if (StatusGelb == HIGH) 
  {      
    // LED für 5 Sekunden (5000 ms) einschalten                         
    digitalWrite(LEDgelb, HIGH); 
    delay(5000);  

    // LED ausschalten                
    digitalWrite(LEDgelb, LOW);   
  }                               
}

Zwei LEDs mit zwei Tastern ansteuern

Aufgabe: Die Schaltung wird mit einem zweiten Taster und einer roten LED erweitert. Wird der linke Taster gedrückt, leuchtet die gelbe LED für eine Sekunde. Ein Druck auf den rechten Taster bringt die rote LED zum Leuchten.

Schaltpläne

Der Programmcode

Arduino UNO

// Pins für die LEDs
int LEDgelb = 8;     
int LEDrot = 9;   

// Pins für die Taster
int TasterRot = 7;
int TasterGelb = 6;   
     
// speichert den Status der LEDs: 0 = aus, 1 = ein
int StatusGelb = 0;  
int StatusRot = 0; 

void setup()  
{
  // LEDs werden als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);  
  pinMode(LEDrot, OUTPUT);  

  // die Taster werden als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
  pinMode(TasterRot, INPUT);  
}

void loop() 
{  
  // Taster für die gelbe LED abfragen
  StatusGelb = digitalRead(TasterGelb); 

  if (StatusGelb == HIGH) 
  {                               
    digitalWrite(LEDgelb, HIGH); 
    delay(1000);                  
    digitalWrite(LEDgelb, LOW);   
  }                               

  // Taster für die rote LED abfragen
  StatusRot = digitalRead(TasterRot); 
  if (StatusRot == HIGH) 
  {                               
    digitalWrite(LEDrot, HIGH); 
    delay(1000);                  
    digitalWrite(LEDrot, LOW);   
  }                             
}

Wemos D1 Mini

// Pins für die LEDs
int LEDgelb = D6;     
int LEDrot = D5;   

// Pins für die Taster
int TasterRot = D7;
int TasterGelb = D8;   
     
// speichert den Status der LEDs: 0 = aus, 1 = ein
int StatusGelb = 0;  
int StatusRot = 0; 

void setup()  
{
  // LEDs werden als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);  
  pinMode(LEDrot, OUTPUT);  

  // die Taster werden als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
  pinMode(TasterRot, INPUT);  
}

void loop() 
{  
  // Taster für die gelbe LED abfragen
  StatusGelb = digitalRead(TasterGelb); 

  if (StatusGelb == HIGH) 
  {                               
    digitalWrite(LEDgelb, HIGH); 
    delay(1000);                  
    digitalWrite(LEDgelb, LOW);   
  }                               

  // Taster für die rote LED abfragen
  StatusRot = digitalRead(TasterRot); 
  if (StatusRot == HIGH) 
  {                               
    digitalWrite(LEDrot, HIGH); 
    delay(1000);                  
    digitalWrite(LEDrot, LOW);   
  }                             
}

ESP32-Wroom

// Pins für die LEDs
int LEDrot = 5;   
int LEDgelb = 17;     

// Pins für die Taster
int TasterRot = 18;
int TasterGelb = 19;   
     
// speichern den Status der LEDs: 0 = aus, 1 = ein
int StatusGelb = 0;  
int StatusRot = 0; 

void setup()  
{
  // LEDs werden als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);  
  pinMode(LEDrot, OUTPUT);  

  // die Taster werden als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
  pinMode(TasterRot, INPUT);  
}

void loop() 
{  
  // Taster für die gelbe LED abfragen
  StatusGelb = digitalRead(TasterGelb); 

  if (StatusGelb == HIGH) 
  {                               
    digitalWrite(LEDgelb, HIGH); 
    delay(500);                  
    digitalWrite(LEDgelb, LOW);   
  }                               

  // Taster für die rote LED abfragen
  StatusRot = digitalRead(TasterRot); 
  if (StatusRot == HIGH) 
  {                               
    digitalWrite(LEDrot, HIGH); 
    delay(1000);                  
    digitalWrite(LEDrot, LOW);   
  }                             
}

NodeMCU

// Pins für die LEDs
int LEDgelb = D3;     
int LEDrot = D4;   

// Pins für die Taster
int TasterRot = D1;
int TasterGelb = D2;   
     
// speichert den Status der LEDs: 0 = aus, 1 = ein
int StatusGelb = 0;  
int StatusRot = 0; 

void setup()  
{
  // LEDs werden als OUTPUT (Ausgang) definiert
  pinMode(LEDgelb, OUTPUT);  
  pinMode(LEDrot, OUTPUT);  

  // die Taster werden als INPUT (Eingang) deklariert
  pinMode(TasterGelb, INPUT);  
  pinMode(TasterRot, INPUT);  
}

void loop() 
{  
  // Taster für die gelbe LED abfragen
  StatusGelb = digitalRead(TasterGelb); 

  if (StatusGelb == HIGH) 
  {                               
    digitalWrite(LEDgelb, HIGH); 
    delay(1000);                  
    digitalWrite(LEDgelb, LOW);   
  }                               

  // Taster für die rote LED abfragen
  StatusRot = digitalRead(TasterRot); 
  if (StatusRot == HIGH) 
  {                               
    digitalWrite(LEDrot, HIGH); 
    delay(1000);                  
    digitalWrite(LEDrot, LOW);   
  }                             
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE