Arduino Button – mit digitalRead() einen Knopf auslesen und eine LED steuern.

Wie bei “Arduino LED blinken lassen” gezeigt, kann der kleine Mikrocontroller Ausgänge steuern. In “Potentiometer auslesen haben wir gezeigt, wie das Auslesen analoger Eingänge funktioniert. Nun ist das Auslesen digitaler Eingänge dran. Mit digitalRead() werden wir einen Taster mit dem Arduino verbinden. Diese Lösung eignet sich zwar nur gut, wenn man einen einzelnen Taster verwenden möchte, es folgt aber auch eine Möglichkeit zur Verwendung mehrerer Taster in einem anderen Tutorial. Hier lassen wir eine LED über den Arduino bei Knopfdruck leuchten.

Dazu brauchen wir:

  • Einen Arduino Uno / Nano / Mega oder vergleichbar
  • Eine LED
  • Ein 220 Ohm Widerstand
  • Ein 10 Kiloohm Widerstand
  • Ein Tastschalter oder Ähnliches

Verkabelt wird alles wie folgt:

Der Widerstand am Button sorgt dafür, dass wenn der Knopf nicht gedrückt wird, der Pin D2 eine Verbindung zu GND hat, also LOW ist. Außerdem lädt er die u.U, gespeicherte Kapazität gegen GND ab und sorgt dafür, dass unser Eingang am D2 nicht verfälscht wird. Über D3 wird dann unsere LED gesteuert. Nun zum Sketch:

const int BUTTON_eingang = 2; // Eingang des Buttons, hier D2. Da sich diese Variable nicht ändert ist sie als "const int" deklariert 

const int LED_ausgang = 3; // Ausgang der LED. Auch hier konstante Variable
int button_zustand = 0; // Setzen des Zustands auf AUS also 0

void setup(){
   pinMode(BUTTON_eingang, INPUT); // BUTTON_eingang wird nun als INPUT Pin festgelegt
   pinMode(LED_ausgang, OUTPUT); // LED_ausgang wird als OUTPUT festgelegt
 }

void loop(){
   button_zustand = digitalRead(BUTTON_eingang); // Auslesen des BUTTON_eingang Pins und festlegen des Ergebnisses als Variable
   
 if (button_zustand == HIGH){ // Wenn Variable für den Zustand == HIGH, dann:
     digitalWrite(LED_ausgang, HIGH); // LED_ausgang wird eingeschaltet
   } else { // wenn die Variable nicht == HIGH, dann:
     digitalWrite(LED_ausgang, LOW); // LED_ausgang wird ausgeschaltet
   }
 }

Die LED sollte nun nur dann leuchten, wenn der Knopf gedrückt wird.

digitalRead() ist eine Funktion des Arduino, bei der ein Pin anders als bei analogRead() nur binär (also 1 oder 0) ausgelesen wird. Bei dieser Weise wird nicht wie bei analogRead() ein Wert zwischen 0 und 1023 ausgegeben, sondern nur HIGH oder LOW. Liegt eingehende Spannung also + am Pin an, so wird das gemessen und der Arduino versteht es als HIGH, liegt keine Spannung an meldet er LOW. Diese Eigenschaft kann man sich allerdings nur an den digitalen Pins zunutze machen. Bei Potentiometern oder Stellwiderständen würde das nicht funktionieren.

Was hier also passier im im Endeffekt super simpel:

  • Wir schließen einen Button am Pluspol und am digitalen Pin an und unterbrechen diese Verbindung damit bis zum Drücken des Schalters
  • Beim Drücken des Buttons setzen wir damit den digitalen Pin auf Spannung
  • Dieser Pin wird gemessen und sobald er HIGH meldet, wird Spannung auf einem anderen Pin ausgegeben
  • Um Kapazitäten (gespeicherter Reststrom) im Kabel, Schalter und Pin selber wieder LOW zu bekommen, haben wir einen Widerstand zwischen digitalen Pin und GND gesetzt. Sobald wir den Knopf lösen, “entlädt” sich der Kreis und wir haben LOW.

Von geekduino

Kontakt: info@geekduino.de