kk logo

Wer kennt das nicht? Man möchte einfach nur einen Taster an den Arduino anschließen, um eine LED umzuschalten oder ein Programm zu starten. Hardwareseitig ist das schnell erledigt: Zwei Drähte vom Taster zu Pin und Masse, fertig. Doch softwareseitig beginnt oft der Frust. Taster müssen immer programmiert werden und das ist reine Fleißarbeit.

Sie einfach nur mit digitalRead() abzufragen, funktioniert in 99 % der Fälle nicht. Warum? Weil mechanische Taster "prellen" (sie schalten beim Drücken zigmal extrem schnell ein und aus). Das führt dazu, dass ein Arduino einen einzigen Tastendruck als fünf oder zehn Klicks interpretiert. Wenn dann im Programm noch ein "Doppelkick", ein "langer Klick" oder gar die Tastendrücke gezählt werden soll, habe ich schon keine Lust mehrt, das ist nicht kreativ Programmieren, das ist Code hin schreiben.

Die Idee: Eine Library für die "Core 4"-Abfragen

Ich hatte genug von dieser repetitiven Fleißarbeit. Ich wollte eine Lösung, die objektorientiert ist, kein delay() nutzt und mir die vier wichtigsten Abfragen serviert, die man bei Tastern fast immer benötigt:

  1. ** Kurz drücken:**  Einmaliges Signal beim Druck.
  2. ** Doppelklick:**    Erkennung von zwei schnellen Klicks.
  3. ** Lange halten:**  Reagieren, wenn der Taster gedrückt bleibt (z. B. für Resets).
  4. ** Mitzählen:**       Automatisches Zählen der Tastendrücke.

Das war die Geburtsstunde des KK_ButtonHandler.

KK ButtonHandler Bibliothek für den Arduino einfache tasterabfrage

Vorstellung der Funktionen

Der KK_ButtonHandler ist eine leichtgewichtige C++ Klasse, die alle Rechnereien im Hintergrund mit millis() erledigt. Hier sind die wichtigsten "Befehle" (Methoden), die sie dir zur Verfügung stellt:

  • myButton.wasPressed(): Gibt genau einmal true zurück, wenn der Taster gedrückt wurde. Perfekt, um eine LED umzuschalten (Toggle).
  • myButton.wasDoubleClicked(): Gibt true zurück, wenn der Taster zweimal schnell hintereinander (innerhalb von 300ms) gedrückt wurde.
  • myButton.isLongPressed(Zeit_in_ms): Gibt true zurück, solange der Taster gedrückt ist UND die angegebene Zeit (z.B. 2000 für 2 Sekunden) überschritten ist.
  • myButton.getClickCount(): Gibt die Anzahl der bisherigen Klicks als Zahl (uint32_t) zurück.
  • myButton.resetClickCount(): Setzt den internen Zähler wieder auf 0 zurück.

Setup und Loop: So einfach ist die Integration

Dank der Library wird dein Hauptcode (Sketch) extrem schlank und lesbar. Ein weiterer riesiger Vorteil: Der KK_ButtonHandler aktiviert automatisch den internen Pullup-Widerstand des Arduinos. Du musst also keine Widerstände auf dem Breadboard verbauen, sondern kannst den Taster direkt zwischen Pin und GND anschließen.

KK ButtonHandler.h Bibliothek für den Arduino einfache tasterabfrage

 

Das All-in-One Beispiel:

 

 

 

 

Grenzen der Library

Obwohl der KK_ButtonHandler extrem nützlich ist, wurde er für einfache Tasteranwendungen konzipiert. Hier sind seine Grenzen:

  • Pro Taster ein Pin: Wenn du 10 Taster hast, benötigst du auch 10 Digital-Pins am Arduino. Sie ist nicht für analoge Multiplexing-Lösungen oder Taster-Matrizen gedacht.
  • Aktive Abfrage (Polling): Die Library nutzt keine Hardware-Interrupts. Sie muss im loop() aktiv mit update() abgefragt werden.
  • Nicht-blockierender Code im loop(): Die Library funktioniert nur dann perfekt, wenn dein Hauptprogramm im loop() schnell durchläuft. Wenn du an einer anderen Stelle im Programm ein delay(5000) nutzt, wird der Taster in dieser Zeit nicht entprellt und Doppelklicks werden nicht erkannt.

Fazit: Wenn du Taster schnell, sicher und ohne Programmier-Kopfschmerzen in dein Arduino-Projekt integrieren willst, ist der KK_ButtonHandler genau das richtige Werkzeug für dich. Er verwandelt mühsame Fleißarbeit in eine saubere, intuitive Code-Zeile.

Du kannst die Library kostenlos auf meinem GitHub-Repository herunterladen:

👉 Link zu meinem GitHub-Repository

Viel Spaß beim Basteln!

Ronnie

schwäbischer tüftler und bastler, kraftsportler, neurodivers, 45 Jahre, 1 Frau, 5 Kinder und 1003 Ideen. 

1.2 ronnie berzins

Kontakt

visitenkarte