Arduino UNO Q - Mehrere Tasten

Das gleichzeitige Verwalten mehrerer Tasten auf Arduino UNO Q ist mit dem richtigen Ansatz einfach. In diesem Tutorial lernen Sie, wie Sie fünf Tasten gleichzeitig mit der ezButton-Bibliothek verwenden — mit vollständiger Entprellungsfunktion und Druck-/Freigabeerkennung — und erweitern dann das Projekt, um Druckzählungen remote über Telegram zu verfolgten.

In diesem Tutorial lernen Sie:

Arduino UNO Q - Mehrere Tasten

Erforderliche Hardware

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
5×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über Tasten

Erfahren Sie mehr über Tasten (Pinbelegung, Verdrahtung, Entprellung) in diesen Tutorials:

Schaltplan

Arduino UNO Q Mehrere Tasten Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

MCU-Code — Mehrere Tasten mit Entprellung

Arduino UNO Q hat zwei Prozessoren: die STM32 MCU (für echtzeitnahe Hardwaresteuerung) und die Qualcomm MPU (läuft Debian Linux). In diesem Abschnitt wird nur der STM32 MCU programmiert — die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.

Die ezButton-Bibliothek verwaltet automatisch Entprellung und Druck-/Freigabeerkennung für jede Taste — keine manuelle Zeitzählungsverfolgung erforderlich:

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-multiple-button */ #include <ezButton.h> #define BUTTON_NUM 5 #define BUTTON_PIN_1 2 // The Arduino UNO Q pin connected to button 1 #define BUTTON_PIN_2 3 // The Arduino UNO Q pin connected to button 2 #define BUTTON_PIN_3 4 // The Arduino UNO Q pin connected to button 3 #define BUTTON_PIN_4 5 // The Arduino UNO Q pin connected to button 4 #define BUTTON_PIN_5 6 // The Arduino UNO Q pin connected to button 5 ezButton button1(BUTTON_PIN_1); ezButton button2(BUTTON_PIN_2); ezButton button3(BUTTON_PIN_3); ezButton button4(BUTTON_PIN_4); ezButton button5(BUTTON_PIN_5); void setup() { button1.setDebounceTime(100); button2.setDebounceTime(100); button3.setDebounceTime(100); button4.setDebounceTime(100); button5.setDebounceTime(100); } void loop() { button1.loop(); // MUST call the loop() function first button2.loop(); button3.loop(); button4.loop(); button5.loop(); if (button1.isPressed()) { /* TO DO: button 1 pressed action */ } if (button1.isReleased()) { /* TO DO: button 1 released action */ } if (button2.isPressed()) { /* TO DO: button 2 pressed action */ } if (button2.isReleased()) { /* TO DO: button 2 released action */ } if (button3.isPressed()) { /* TO DO: button 3 pressed action */ } if (button3.isReleased()) { /* TO DO: button 3 released action */ } if (button4.isPressed()) { /* TO DO: button 4 pressed action */ } if (button4.isReleased()) { /* TO DO: button 4 released action */ } if (button5.isPressed()) { /* TO DO: button 5 pressed action */ } if (button5.isReleased()) { /* TO DO: button 5 released action */ } }

Schnelle Schritte

  • Erstes Mal mit Arduino UNO Q? Folgen Sie dem Tutorial Erste Schritte mit Arduino UNO Q, um Ihre Entwicklungsumgebung vorzubereiten, bevor Sie fortfahren.
  • Verdrahten Sie die Tasten: Verbinden Sie fünf Tasten mit den Pins 2–6 gemäß dem Schaltplan. Jede Taste hat einen Pin an GND und den anderen am Signalpin.
  • Verbinden: Stecken Sie die Arduino UNO Q mit einem USB-C-Kabel in Ihren Computer ein.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihre Arduino UNO Q erkennt.
  • Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Neue App erstellen.
Neue App im Arduino App Lab auf Arduino UNO Q erstellen
  • Geben Sie der App einen Namen, z. B.: DIYables_MultiButton
  • Klicken Sie auf Erstellen, um zu bestätigen.
  • Sie sehen einen Satz von Ordnern und Dateien, die in Ihrer neuen App generiert werden.
Arduino App Lab App-Ordner und -Dateien auf Arduino UNO Q
  • Finden Sie die Datei sketch/sketch.ino — hier fügen Sie die MCU-Skizze ein.
  • Fügen Sie die Skizze ein: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Skizzendatei ein. Behalten Sie andere Dateien wie in der Standardeinstellung.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    Add sketch library in Arduino App Lab on Arduino UNO Q
    • Search for ezButton created by ArduinoGetStarted.com and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    ezButton ArduinoGetStarted.com

    Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users.

    1.0.6
    Install
    More Info
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Upload: Klicken Sie auf die Ausführungsschaltfläche im Arduino App Lab, um zu kompilieren und auf den STM32 hochzuladen.
    Klicken Sie auf die Ausführungsschaltfläche im Arduino App Lab auf Arduino UNO Q
    • Drücken Sie die Tasten nacheinander — drücken und lassen Sie jede Taste los und sehen Sie das Ergebnis im Bridge-Abschnitt unten.
    • Pro-Tipp: Fügen Sie Aktionscode in jedem isPressed() / isReleased()-Block hinzu, um LEDs, Servos oder andere Komponenten zu steuern.

    Sauberer Code mit einem Taste-Array

    Die Verwendung eines Arrays von ezButton-Objekten macht den Code skalierbar — das Hinzufügen von weiteren Tasten erfordert nur das Ändern von BUTTON_NUM:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-multiple-button */ #include <ezButton.h> #define BUTTON_NUM 5 #define BUTTON_PIN_1 2 // The Arduino UNO Q pin connected to button 1 #define BUTTON_PIN_2 3 // The Arduino UNO Q pin connected to button 2 #define BUTTON_PIN_3 4 // The Arduino UNO Q pin connected to button 3 #define BUTTON_PIN_4 5 // The Arduino UNO Q pin connected to button 4 #define BUTTON_PIN_5 6 // The Arduino UNO Q pin connected to button 5 ezButton buttonArray[] = { ezButton(BUTTON_PIN_1), ezButton(BUTTON_PIN_2), ezButton(BUTTON_PIN_3), ezButton(BUTTON_PIN_4), ezButton(BUTTON_PIN_5) }; void setup() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].setDebounceTime(100); } void loop() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // MUST call the loop() function first for (byte i = 0; i < BUTTON_NUM; i++) { if (buttonArray[i].isPressed()) { // TO DO: button (i+1) pressed action here } if (buttonArray[i].isReleased()) { // TO DO: button (i+1) released action here } } }
    • So funktioniert es: Die Schleife verarbeitet alle Tasten generisch mit dem Array-Index. Die Druck-/Freigabeereignisse jeder Taste lösen unabhängige Aktionen aus.
    • Pro-Tipp: Fügen Sie ein Zähl-Array (int press_count[BUTTON_NUM] = {0}) hinzu und erhöhen Sie press_count[i] bei jedem isPressed(), um zu verfolgen, wie oft jede Taste gedrückt wurde.

    Linux + MCU Bridge-Programmierung

    Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: die MPU (Qualcomm, läuft Debian Linux) und die MCU (STM32, läuft Zephyr OS mit Ihrer Arduino-Skizze). Sie kommunizieren über RPC über die Arduino_RouterBridge-Bibliothek — niemals über rohe serielle Ports.

    • Alle Tasten sind an der MCU (STM32) angeschlossen — verdrahtet mit digitalen Eingangspins auf dem STM32. Der MCU verwaltet Entprellung und Druckzählung mit ezButton.
    • Die MPU kann Tasten nicht direkt lesen — sie muss Daten vom MCU über Bridge.call() anfordern. Der MCU antwortet mit Druckzählungen oder setzt diese zurück.
    • Die MPU hat Wi-Fi — da die MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann es Druckzählungen über Telegram weiterleiten und Befehle zum Zurücksetzen remote 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 niemals direkt

    Kurz gesagt: MCU zählt Tasten Drücke → MPU fordert Zählungen an → MPU leitet sie über Telegram weiter.

    MCU-Skizze — mehrere Tasten mit Druckzählung und Bridge:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-multiple-button */ #include "Arduino_RouterBridge.h" #include <ezButton.h> #define BUTTON_NUM 5 #define BUTTON_PIN_1 2 #define BUTTON_PIN_2 3 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 #define BUTTON_PIN_5 6 ezButton buttonArray[] = { ezButton(BUTTON_PIN_1), ezButton(BUTTON_PIN_2), ezButton(BUTTON_PIN_3), ezButton(BUTTON_PIN_4), ezButton(BUTTON_PIN_5) }; int press_count[BUTTON_NUM] = {0}; void get_press_counts() { String msg = "Press counts: "; for (int i = 0; i < BUTTON_NUM; i++) { msg += "B" + String(i + 1) + "=" + String(press_count[i]); if (i < BUTTON_NUM - 1) msg += ", "; } Monitor.println(msg); } void reset_counts() { for (int i = 0; i < BUTTON_NUM; i++) press_count[i] = 0; Monitor.println("All press counts reset"); } void setup() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].setDebounceTime(100); Bridge.begin(); Monitor.begin(); Bridge.provide("get_press_counts", get_press_counts); Bridge.provide("reset_counts", reset_counts); Monitor.println("Multiple Button Bridge ready"); } void loop() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); for (byte i = 0; i < BUTTON_NUM; i++) { if (buttonArray[i].isPressed()) { press_count[i]++; Monitor.println("Button " + String(i + 1) + " PRESSED (count: " + String(press_count[i]) + ")"); } if (buttonArray[i].isReleased()) Monitor.println("Button " + String(i + 1) + " RELEASED"); } }

    Python-Skript (Arduino App Lab) — Abfrage der Druckzählungen von Linux:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-multiple-button */ from arduino.app_utils import * import time def loop(): while True: counts = Bridge.call("get_press_counts") print(f"Button press counts: {counts}") time.sleep(5) App.run(user_loop=loop)
    • 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 niemals direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code — diese sind vom Arduino Router reserviert und der Zugriff auf sie beeinträchtigt die Bridge.

    Schnelle Schritte

    • Laden Sie die MCU-Skizze hoch: Ö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 Bibliotheken ezButton und Arduino_RouterBridge, und klicken Sie auf Ausführen.
    • Fügen Sie das Python-Skript hinzu: Fügen Sie den Python-Code oben in die Python-Registerkarte der gleichen App ein.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — die Python-Seite fragt alle 5 Sekunden Druckzählungen ab.
    • Drücken Sie die Tasten mehrmals.
    • Überprüfen Sie die Konsole: Öffnen Sie die Registerkarte Konsole → Unterregisterkarte MCU Monitor, um Druck-/Freigabeereignisse anzuzeigen.

    App Lab Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Multiple Button Bridge ready Button 1 PRESSED (count: 1) Button 1 RELEASED Button 3 PRESSED (count: 1) Button 3 RELEASED Button 5 PRESSED (count: 1) Button 5 RELEASED

    Telegram-Integration

    Fragen Sie Tasten-Druckzählungen remote über Telegram ab oder setzen Sie diese zurück.

    Wenn Sie noch keinen Telegram-Bot haben, siehe Wie erstelle ich einen Telegram-Bot, um Ihr Bot-Token zu erhalten, bevor Sie fortfahren.

    MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt bei — keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits hochgeladen und auf dem STM32 ausgeführt wird, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) — Telegram-Bot zur Verfolgung mehrerer Tasten:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-multiple-button */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/counts": counts = Bridge.call("get_press_counts") send_message(chat_id, f"Button press counts:\n{counts}") elif text == "/reset": Bridge.call("reset_counts") send_message(chat_id, "All press counts reset to 0") else: send_message(chat_id, "Commands:\n/counts — get all button press counts\n/reset — reset all counts to 0") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
    • Senden Sie /counts, um alle fünf Tasten-Druckzählungen zu erhalten.
    • Senden Sie /reset, um alle Zählungen auf Null zurückzusetzen.

    Schnelle Schritte

    • Laden Sie die MCU-Skizze hoch: Verwenden Sie die Bridge-MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls nicht bereits geschehen).
    • Fügen Sie das Telegram-Skript ein: Kopieren Sie den Python-Code oben in die Python-Registerkarte Ihrer App im Arduino App Lab.
    • Stellen Sie Ihr Token ein: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr tatsächliches Bot-Token.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
    • Testen Sie es: Drücken Sie jede Taste mehrmals, senden Sie dann /counts auf Telegram. Senden Sie dann /reset, um alle Zählungen zu löschen.

    App Lab Python-Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /counts [2026-04-29 12:00:01] Button press counts: B1=3, B2=1, B3=5, B4=0, B5=2 [2026-04-29 12:01:10] Telegram: /reset [2026-04-29 12:01:10] All press counts reset to 0
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /counts
    10:15 AM ✓✓
    Button press counts: B1=3, B2=1, B3=5, B4=0, B5=2
    10:16 AM
    /reset
    10:17 AM ✓✓
    All press counts reset to 0
    10:18 AM

    OpenClaw-Integration

    Sie können die OpenClaw an dieses Tutorial anpassen, indem Sie die Anleitung im Tutorial Arduino Uno Q - OpenClaw lesen

    Anwendungs-/Projektideen

    • Tastaturfeld: Jede Taste sendet eine andere Telegram-Nachricht — nützlich für schnelle Voreinstellungen oder Befehle
    • Abstimmungszähler: Jede Taste erfasst eine Abstimmung für eine andere Option; Abfrageergebnisse über Telegram
    • Moduswähler: Drücken Sie Taste 1 für Modus A, Taste 2 für Modus B — jede löst eine andere Aktion auf der MPU aus
    • Mehrzonenwecker: Jede Taste ist mit einem anderen Zonenmelder verknüpft; Druckzählungen protokollieren, wie oft jede Zone ausgelöst wurde
    • Remote-Testfeld: Tasten drücken, um verschiedene Hardwarefunktionen zu testen, mit Ergebnissen über Telegram

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!