Taster am Mikrocontroller

Inhaltsverzeichnis

Für dieses Projekt benötigst du

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 bis zu 10 % Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 4.000 Artikel sofort verfügbar!
  • Mehr als 10 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE
Benötigst du Unterstützung bei deinem Projekt?

Alle Modelle der hier gezeigten Modelle sind hier zum Download  in einer kompakten Zip Datei verfügbar.