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“.
Im Tutorial Arduino Lektion 33: Taster mit Pull Down Widerstand habe ich bereits erläutert, wie man eine kleine Schaltung mit einem Taster und einem Pull Down Widerstand aufbaut. Jedoch hat diese Schaltung genau das beschriebene Problem, wenn man den Taster drückt und sofort wieder loslä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.)
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 jetzt 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); } }
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
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