Arduino UNO Q - Button Entprellen
Bei der Programmierung eines Arduino UNO Q zur Erkennung eines Buttondrucks kann ein einzelner Druck mehrfach erkannt werden. Dies geschieht, weil mechanische Kontakte schnell zwischen LOW und HIGH oszillieren — ein Phänomen namens Flattern oder Chattering. Dieses Tutorial zeigt Ihnen, wie Sie dies durch Entprellung beheben.


Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
MCU-Code — Ohne Entprellung (zum Vergleich)
Das Arduino UNO Q hat zwei Prozessoren: die STM32 MCU (übernimmt die Echtzeitkontrolle der Hardware) und die Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur die STM32 MCU programmiert — die Linux-Seite bleibt inaktiv. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.
Dies ist die Version ohne Entprellung aus dem Button-Tutorial. Beachten Sie, dass ein einzelner Druck mehrfach registriert werden kann:
Schnellschritte
- Erstmals mit Arduino UNO Q? Folgen Sie zunächst dem Tutorial Getting Started with Arduino UNO Q, um Ihre Entwicklungsumgebung einzurichten.
- Button verdrahten: Verbinden Sie einen Button-Pin mit GND und den anderen mit Pin 7 gemäß dem Schaltplan.
- Verbinden: Schließen Sie den Arduino UNO Q mit einem USB-C-Kabel an Ihren Computer an.
- Arduino App Lab öffnen: Starten Sie Arduino App Lab und warten Sie, bis es Ihren Arduino UNO Q erkennt.
- Neue App erstellen: Klicken Sie auf die Schaltfläche Neue App erstellen.

- Geben Sie der App einen Namen, z. B.: DIYables_ButtonDebounce
- Klicken Sie auf Erstellen, um zu bestätigen.
- Sie sehen einen Satz von Ordnern und Dateien, die in Ihrer neuen App generiert werden.

- Suchen Sie die Datei sketch/sketch.ino — dies ist, wo Sie die MCU-Skizze einfügen.

- Button einmal drücken, dann loslassen — beobachten Sie, dass mehrere Ereignisse protokolliert werden können (sichtbar über den Bridge Monitor im nächsten Abschnitt).
- Hinweis: Dies ist der Chattering-Effekt — der nächste Abschnitt behebt ihn.
MCU-Code — Mit Entprellung (mit millis)
Diese Version verwendet millis(), um zu warten, bis sich das Signal stabilisiert, bevor es als echtes Ereignis behandelt wird. Nur Zustandsänderungen, die länger als DEBOUNCE_TIME Millisekunden anhalten, werden akzeptiert:
- So funktioniert es: Wenn sich der Button-Zustand schnell ändert (Flattern), wird der Timer jedes Mal zurückgesetzt. Nur wenn der Zustand für 50 ms stabil ist, wird er als echtes Drücken oder Loslassen behandelt.
- Pro-Tipp: Wenn Ihr Button immer noch mehrfache Ereignisse anzeigt, versuchen Sie, DEBOUNCE_TIME auf 75 oder 100 zu erhöhen.
※ Notiz:
Die optimale DEBOUNCE_TIME hängt von der Button-Qualität und der Anwendung ab. 50 ms ist ein sicherer Standard für die meisten Druckschalter.
Linux + MCU Bridge-Programmierung
Das Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, führt Debian Linux aus) und die MCU (STM32, führt Zephyr OS mit Ihrer Arduino-Skizze aus). Sie kommunizieren mittels RPC über die Arduino_RouterBridge-Bibliothek — niemals über rohe serielle Anschlüsse.
- Der Button ist mit der MCU (STM32) verbunden — verdrahtet mit einem digitalen Eingangspin auf der STM32. Die MCU liest und entprellt Button-Drücke mit der ezButton-Bibliothek.
- Die MPU kann den Button nicht direkt lesen — sie muss Daten über Bridge.call() von der MCU anfordern. Die MCU antwortet mit der Druckzahl oder setzt sie zurück.
- Die MPU hat Wi-Fi — da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann sie Druckzahlen über Telegram melden und Remote-Reset-Befehle akzeptieren.
- Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide()-Funktionen auf der MCU-Seite auf
- ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino Router verwendet — öffnen Sie sie nie direkt
Kurz gesagt: MCU entprellt Button-Drücke und zählt sie → MPU fordert die Zahl an → MPU leitet sie über Telegram weiter.
MCU-Skizze — Button-Entprellung mit Druckzähler und Bridge:
Python-Skript (Arduino App Lab) — Druckzahl von Linux abrufen:
- Hinweis: Stellen Sie sicher, dass Bridge.begin() in der MCU-Skizze aufgerufen wird und die Skizze hochgeladen ist, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
- ⚠️ Warnung: Öffnen Sie nie direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code — diese sind vom Arduino Router reserviert und deren Zugriff unterbricht die Bridge.
Schnellschritte
- MCU-Skizze hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie die Bridge-MCU-Skizze oben in sketch/sketch.ino ein, installieren Sie die ezButton- und Arduino_RouterBridge-Bibliotheken, und klicken Sie auf Run.
- Python-Skript hinzufügen: Fügen Sie den Python-Code oben in die Python-Registerkarte derselben App ein.
- App ausführen: Klicken Sie auf Run — die Python-Seite fragt die Druckzahl alle 3 Sekunden ab.
- Button mehrfach drücken.
- Konsole prüfen: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, um Druck-/Loslassereignisse zu sehen. Öffnen Sie die Python-Konsole-Unterregisterkarte, um die abgerufene Zahl zu sehen.
App Lab Konsolenausgabe
Telegram-Integration
Sie können die Button-Druckzahl von überall aus über Telegram abfragen oder zurücksetzen.
Wenn Sie noch keinen Telegram-Bot haben, sehen Sie How to Create a Telegram Bot, um Ihr Bot-Token zu erhalten, bevor Sie fortfahren.
MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits auf die STM32 hochgeladen ist und läuft, bevor Sie fortfahren.
Python-Skript (Arduino App Lab) — Telegram-Bot für Button-Druckzähler-Verfolgung:
- Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
- Senden Sie /count, um zu sehen, wie oft der Button seit dem Einschalten oder dem letzten Zurücksetzen gedrückt wurde.
- Senden Sie /reset, um den Zähler auf 0 zurückzusetzen.
Schnellschritte
- MCU-Skizze hochladen: Verwenden Sie die Bridge-MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls nicht bereits geschehen).
- Telegram-Skript einfügen: Kopieren Sie den Python-Code oben in die Python-Registerkarte Ihrer App in Arduino App Lab.
- Ihr Token setzen: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr echtes Bot-Token.
- App ausführen: Klicken Sie auf Run — der Bot beginnt sofort, auf Telegram-Nachrichten zu lauschen.
- Testen Sie es: Drücken Sie den Button 5 Mal, senden Sie dann /count auf Telegram — Sie sollten 5 erhalten. Senden Sie dann /reset und /count erneut, um zu bestätigen, dass es zurückgesetzt wird.
- Pro-Tipp: Verwenden Sie dies als Ereigniszähler zum Zählen von Besuchern, Maschinenzyklen oder ausgelösten Warnungen.
App Lab Konsolenausgabe
ArduinoBot
OpenClaw-Integration
Sie können die OpenClaw diesem Tutorial anpassen, indem Sie sich auf die Anleitung im Tutorial Arduino Uno Q - OpenClaw beziehen
Ideen für Anwendungen/Projekte
- Besucherzähler: Platzieren Sie einen Button an einer Tür — die Druckzahl verfolgt, wie viele Personen eingetreten sind
- Maschinenzyklusszähler: Zählen Sie Aktuator-Zyklen in einer Produktionslinie, überprüfen Sie die Zahl über Telegram
- Manuelles Ereignisprotokoll: Drücken Sie den Button, um ein zeitgestempeltes Ereignis auf der Linux-Seite (MPU hat echte Uhr) zu protokollieren
- Multi-Mode-Controller: Jeder Button-Druck wechselt zum nächsten Modus; überprüfen Sie den Modus über Telegram
- Zum-Bestellen-Drücken: Drücken Sie den Button, um eine Telegram-"Nachbestellung"-Nachricht für Vorräte zu senden
Fordern Sie sich selbst heraus
- Einfach: Ändern Sie die Bridge-Skizze, um auch zu verfolgen, wie oft der Button losgelassen wurde
- Mittel: Fügen Sie eine get_last_press_time()-Bridge-Funktion hinzu, die die Anzahl der Sekunden seit dem letzten Druck zurückgibt
- Fortgeschritten: Erstellen Sie einen Telegram-Bot, der automatisch eine Nachricht sendet, wenn die Druckzahl eine Zielzahl erreicht (z. B. "10 Drücke erreicht!")

