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.

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, dass 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);
}

a

Schreibe einen Kommentar

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

Ich akzeptiere

 

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