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

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 3.7 / 5. Anzahl Bewertungen: 3

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Deine Meinung ist mir sehr wichtig!

Lasse uns diesen Beitrag verbessern!

Wie kann ich den Beitrag verbessern? Was würdest du dir wünschen? Was hat dir gefehlt?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

One thought on “Arduino und Taster

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.