Zum Inhalt springen
Arduino Taster Buttons

Arduino und Taster

    Einen Taster am Arduino anschließen und auslesen ist relativ einfach, doch es gibt ein paar Dinge zu beachten.

    Arduino und Taster (Button) direkt angeschlossen
    Taster direkt am Arduino als INPUT

    In der Abbildung ist ein Taster direkt mit dem Arduino verbunden. Diese Schaltung funktioniert leider so nicht. Solange der Taster nicht gedrückt ist, liegt am Pin 8 kein definiertes Signal an. Man sagt auch, es rauscht.

    Taster (Button) am Arduino mit Pullup (Pull-Up) Widerstand
    Taster mit Pull-Up-Widerstand

    Um dieses Rauschen zu unterdrücken, kann man einen Pull-Up-Widerstand verwenden. Er sorgt dafür, dass das Rauschen abgeleitet wird und somit ein sauberes Signal anliegt, auch wenn der Taster nicht gedrückt ist.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Taster am Arduino mit internem Pull-Up-Widerstand (Pullup)
    Button direkt am Arduino mit internem Pull-Up-Widerstand

    Leider sorgt das für einen zusätzlichen Bauteil- und Verdrahtungsaufwand. Deshalb sind im Microcontroller des Arduino-Boards bereits interne Pull-Up-Widerstände integriert. Sie lassen sich sehr einfach in der Pindeklaration hinzuschalten.

    pinMode(8, INPUT_PULLUP);

    Ein Beispiel-Programm, das bei Drücken des Tasters eine LED einschaltet, könnte so aussehen:

    Code

    const int ledPin = 13;
    const int buttonPin = 8;
    
    void setup() {
      pinMode(ledPin, OUTPUT);
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      if (digitalRead(buttonPin)==LOW){
        digitalWrite(ledPin, HIGH);  
      } else {
        digitalWrite(ledPin, LOW);  
      }
      delay(10);
    }

    Entprellen (Software)

    Taster haben die Eigenschaft, nicht direkt in den nächsten Zustand zu schalten, sondern neigen dazu, ein paar mal hin- und herzuschalten (bouncing). In der Grafik wird dieses Verhalten verdeutlicht.

    Abhilfe schaffen entweder hardwareseitige Entprellschaltungen (debouncing) oder softwareseitige Lösungen.

    Eine softwareseitige Lösung für das Bouncing-Problem ist die bounce.h-Bibliothek. Sie ermöglicht es, die Prellzeit des Tasters zu ignorieren.

    Die Bounce-Bibliothek hilft beim Entprellen des Tasters
    Die Bounce-Bibliothek hilft beim Entprellen des Tasters

    Codebeispiel

    #include <Bounce2.h>
    
    const int ledPin = 13;
    const int buttonPin = 8;
    
    Bounce  myButton  = Bounce();
    
    void setup() {
      pinMode(ledPin, OUTPUT);
      pinMode(buttonPin, INPUT_PULLUP);
      myButton.attach(buttonPin);
      myButton.interval(5); // 5ms zum Entprellen
    }
    
    void loop() {
      myButton.update();
      if (myButton.fallingEdge()) {
        digitalWrite(ledPin, HIGH);
      }
      if (myButton.risingEdge()) {
        digitalWrite(ledPin, LOW);
      }
      delay(10);
    }

    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    5 Gedanken zu „Arduino und Taster“

    1. Das ist eine der besten Erklärungen zum Thema PullUp und Prellen! Danke.
      Aber warum eine Lib für das Entprellen?
      Ein if für die Prüfung, ein paar millis warten und dann noch einmal prüfen – fertig.

      1. Hallo BH, ja, das kann man natürlich auch so machen und reicht in den meisten Fällen. Manchmal will man es aber sehr präzise und da ist so eine Library Gold wert. Liebe Grüße Stefan

    2. Pingback: Stoppuhr mit Arduino und Segmentanzeige – Arduino+TM1637

    3. Pingback: So baust du einen Kronleuchter mit Arduino – Ein Arduino Tutorial

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.