A07|01 Der digitale Momentanschalter
Digital Push Button Module


Sensorwerte / Einfache Eingabe

Ein Taster ist eine sehr einfache Komponente. Es besitzt nur zwei Zustände: geöffnet und geschlossen. Im geschlossenem Zustand verhält es sich wie ein Stück Draht und geöffnet unterbricht es den Stromkreis. Jeder Taster kann in zwei Kategorien eingeteilt werden: momentan oder permanent.
Ein permanenter Taster verharrt im aktuellen Zustand bis er wieder betätigt wird.

 

Spezifikationen
- Signalart: digital
- Spannung: 3,3V – 5V
- Pinabstand: 2,54mm

In diesem Teil des Tutorials beschäftigen wir uns mit dem momentanen Taster. Bei diesem Taster fließt der Strom nur beim Drücken, beim Loslassen wird der Stromkreis wieder unterbrochen. Nach diesem Prinzip arbeitet die Computer-Tastatur. Es gibt auch Taster, die genau umgekehrt funktionieren: Sie unterbrechen den Stromkreis, wenn man sie betätigt.

 

Der Aufbau

Verbinde den Minus-Pin des Tasters mit dem GND-Pin des Arduinos. Mache das Gleiche mit dem Plus-Pin des Tasters mit dem 5V-Pin. Das S auf dem Taster steht für Signal, verbinde diesen mit dem Arduino-Pin 3.

 
 

Der minimal Sketch

In diesem Sketch wird die interne LED des Arduino durch Drücken des digitalen Momentan-Schalters zum Leuchten gebracht. Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/********************************************************
A07|01 Der digitale Momentanschalter
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

int buttonPin = 3; //Pin für den Taster
int ledPin = 13;   //Pin für die LED


void setup()
{ 
  pinMode(ledPin, OUTPUT);   //LED-Pin als Ausgang deklarieren
  pinMode(buttonPin, INPUT); //Taster als Eingang deklarieren
}


void loop()
{
  //Variable um den Tasterzustand abzufragen
  int buttonState = digitalRead(buttonPin); 
                                            
  if (buttonState == HIGH) //Prüfen, ob Taster gedrückt wurde
  {
    //Dieser Teil wird ausgeführt, wenn buttonState HIGH ist
    digitalWrite(ledPin, HIGH); //LED einschalten 
  }

  else
  {
    //Dieser Teil wird ausgeführt, wenn buttonState LOW ist
    digitalWrite(ledPin, LOW); //LED ausschalten 
  }
}
 

Der Sketch im Detail

Wir bestimmen zunächst eine Variable des Typs int (Integer) mit dem Namen buttonPin und weisen ihm den Wert 3 zu. Diese Variable benutzen wir für unseren Taster. Für die LED machen wir genau das gleiche: Wir bestimmen eine Variable des Typs int mit dem Namens ledPin und weisen ihm den Wert 13 zu. Die meisten Arduino-Boards haben auf dem digitalen Pin 13 eine fest verdrahtete LED, d.h. müssen nicht unbedingt ein LED-Modul anschließen.

int buttonPin = 3; //Pin für den Taster
int ledPin = 13;   //Pin für die LED
 

Im void setup() teilen wir dem Arduino mit dem Befehl pinMode() mit, dass die LED über den Pin 3 (ledPin) als OUTPUT verwendet wird und der Taster über den Pin 13 (buttonPin) als INPUT konfiguriert werden soll.

pinMode(ledPin, OUTPUT);   //LED-Pin als Ausgang deklarieren
pinMode(buttonPin, INPUT); //Taster als Eingang deklarieren
 

Im Folgendem initialisieren wir eine neue Variable namens buttonState um die Werte des Tasters zwischenzuspeichern. Mit digitalRead(buttonPin) wird die Variable buttonState direkt mit dem Arduino-Pin verbunden.

void loop()
{
  //Variable um den Tasterzustand abzufragen
  int buttonState = digitalRead(buttonPin); 
  ...
}
 

Und nun der interessanteste Teil des Sketches – die if-else-Abfrage. Es handelt sich dabei um eine wenn... dann... ansonsten... Konstruktion.

Auf unser Beispiel angewendet bedeutet es:
> Wenn (if) der Taster gerückt wird (buttoState == HIGH)
> dann schalte die LED an: digitalWrite(ledPin, HIGH)
> ansonsten (else) schalte die LED aus: digitalWrite(ledPin, LOW)

if (buttonState == HIGH) //Prüfen, ob Taster gedrückt wurde
  {
    // Dieser Teil wird ausgeführt, wenn buttonState HIGH ist
    digitalWrite(ledPin, HIGH); //LED einschalten 
  }

else
  {
    // Dieser Teil wird ausgeführt, wenn buttonState LOW ist
    digitalWrite(ledPin, LOW); //LED ausschalten 
  }
 

Im Grunde ist eine if-Abfrage eine verschlossene Box mit einem verborgenem Inhalt, der nur geöffnet wird, wenn der richtige Schlüssel verwendet wird. Der Inhalt wird nur dann freigegeben, wenn die Kondition innerhalb der runden Klammer erfüllt ist buttonState == HIGH (der Schlüssel). Wird die Kondition nicht erfüllt, springt das Programm weiter und ignoriert den Inhalt.

if (buttonState == HIGH) //Prüfen, ob Taster gedrückt wurde
  {
    ...
  }
 

Aber falls die Kondition erfüllt ist und nur dann, wird in den sogenannten Schleifen-Körper gesprungen und alle enthaltenen Befehle abgearbeitet. In unserem Beispiel wird die LED eingeschaltet. Hier können viele Befehle enthalten sein, nicht nur eine Zeile Code.

//Dieser Teil wird ausgeführt, wenn buttonState HIGH ist
digitalWrite(ledPin, HIGH); //LED einschalten
 

Vorsicht mit = und ==

Eine wichtige Sache müssen wir hier beachten. In der Programmierung ist ein Gleichheitszeichen = eine Zuweisung. Mit = verändern wir den Wert einer Variablen. Aber in unserer If-Abfrage wollen wir kein Wert ändern, sondern vergleichen. Hierzu gibt es den Gleichheitsoperator ==. Der Gleichheitsoperator == vergleicht “nur” die Variable buttonState mit dem Zustand HIGH. Die Verwechslung von Gleichheitsoperator == und Zuweisungsoperator = ist ein häufiger Anfängerfehler. Beide haben völlig unterschiedliche Funktionen und werden oft vertauscht.

if(buttonState == HIGH); //richtige Verwendung
if(buttonState = HIGH);  //falsche Verwendung
 

Zurück zum Sketch

Falls die if-Abfrage nicht erfüllt wird, also die Taste nicht gedrückt wird (buttonState = LOW), dann springt das Programm weiter in die Zeile else. Else (ansonsten) ist eine Alternativ-Lösung. Else besitzt keine runden Klammern, da hier nichts abgefragt wird. Wird zuvor if übersprungen, dann wird der Inhalt von else abgearbeitet. Im Körper von else wird in unserem Sketch die LED mit digitalWrite(ledPin, LOW) ausgeschaltet.

else
{
  // Dieser Teil wird ausgeführt, wenn buttonState LOW ist
  digitalWrite(ledPin, LOW); //LED ausschalten }
}
 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.