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 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.