Arduino Lektion 87: Taster entprellen

Wenn man einen Taster in seine Schaltung einbaut, so wird man früher oder später darauf stoßen, dass dieser mehr als einmal ein Signal sendet. Dieses Verhalten nennt man „prellen“.

Taster mit Pull Down Widerstand
Taster mit Pull Down Widerstand

Im Tutorial Arduino Lektion 33: Taster mit Pull Down Widerstand habe ich bereits erläutert, wie man eine kleine Schaltung mit einem Taster und einen Pull Down Widerstand aufbaut. Jedoch hat diese Schaltung genau das beschriebene Problem, wenn man den Taster drückt und sofort wieder los lässt wird mehr als ein Signal gesendet.

Sketch – Taster mit Prellen

const int btnUp = 2; //Taster

int statusBtnUp = 0; //Status des Tasters
int index = 0; // Zählvariable

void setup() {
  Serial.begin(9600); //Beginn der Seriellenkommunikation
  pinMode(btnUp,INPUT); //Setzen des Eingangssignals des Tasters
}

void loop() {
  
  if(digitalRead(btnUp) == HIGH){ 
    index = index+1;
    Serial.println(index);
  }
}

Video

Lösung mit der Bounce2 Bibliothek

Hier hilft die Bounce2 Bibliothek weiter, diese Bibliothek enthält Funktionalitäten welche genau dieses „prellen“ von Tastern unterdrückt. (Wie man eine Bibliothek der Arduino IDE installiert habe ich bereits im Tutorial Arduino IDE, Einbinden einer Bibliothek ausführlich erläutert.)

Arduino IDE - Bounce2 Bibliothek
Arduino IDE – Bounce2 Bibliothek

Wenn die Bibliothek erfolgreich installiert wurde, dann muss diese über den Befehl „#include <Bounce2.h>“ dem Sketch hinzugefügt werden.

Zunächst einmal muss für jeden Button eine Instanz von „Bounce“ erzeugt werden. Im Konstruktor des Bounce Objektes wird der Pin, an welchem der Taster angeschlossen ist und zusätzlich ein Wert für eine Pause (in Millisekunden)  übergeben.

#include <Bounce2.h>

#define BTN 2

Bounce btnBouncer = Bounce(BTN, 50);

In der Funktion „setup“ muss wie gehabt der pinMode für die Taster auf Input gesetzt werden.

pinMode(BTN, INPUT);

Die Funktion „loop“ muss deutlich umgeschrieben werden, denn wir verwenden nun die Befehle und Funktionen von der Bounce2 Bibliothek.

Im ersten Schritt müssen wir den Taster aktualisieren.

btnBouncer.update();

Um danach zu prüfen ob der Taster gedrückt wurde.

if(btnBouncer.fell()){
  index = index+1;
  Serial.println(index);
}

Wenn man prüfen möchte ob der Taster wieder losgelassen wurde dann nutzt man die Funktion „rose“.

Hier nun der gesamte Sketch zum Nachbauen und selber Testen.

Sketch – Taster ohne prellen

#include <Bounce2.h>

#define BTN 2

int index = 0;

Bounce btnBouncer = Bounce(BTN, 50);

void setup() {
  Serial.begin(9600);
  pinMode(BTN, INPUT);
  
  digitalWrite(BTN, HIGH);  
}

void loop() {
  btnBouncer.update();

  if(btnBouncer.fell()){
    index = index+1;
    Serial.println(index);
  }
  
}

Video

9 Kommentare

  1. Der Sketch, Taster ohne prellen, hat super funktioniert. Nach drei Tagen als ich ihn nochmal probieren wollte, geht er nicht mehr. D.h. Auf dem Ser. Monitor wird nichts mehr angezeigt. Was mache ich falsch.??
    Kann mir bitte jemand helfen.
    Danke.
    Arduino Uno

    1. Hi,

      wenn du ein Breadboard verwendest, dann prüfe zunächst ob alle Kabel korrekt sitzen.
      Ansonsten nimm doch mal ein Messgerät und prüfe ob der Strom fließt.

      Gruß,

      Stefan

Kommentar hinterlassen

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