Einen Taster am Arduino anschließen und auslesen ist relativ einfach, doch es gibt ein paar Dinge zu beachten.
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.
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.
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.
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
Ein Arduino Taster hat ja 4 Pins. Wie weiß ich welcher PIN was macht?
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.
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
Pingback: Stoppuhr mit Arduino und Segmentanzeige – Arduino+TM1637
Pingback: So baust du einen Kronleuchter mit Arduino – Ein Arduino Tutorial