Arduino UNO Q - Boutons Multiples

Gérer plusieurs boutons simultanément sur Arduino UNO Q est facile avec la bonne approche. Dans ce tutoriel, vous apprendrez à gérer cinq boutons à la fois en utilisant la bibliothèque ezButton — avec anti-rebond complet et détection de pression/relâchement — puis à étendre le projet pour suivre les comptages de pressions à distance via Telegram.

Dans ce tutoriel, vous apprendrez :

Arduino UNO Q - Boutons Multiples

Matériel Requis

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
5×Bouton avec capuchon pour plaque d'essai
1×Kit bouton pour plaque d'essai
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Shield à bornier à vis pour Arduino Uno
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommandé: Shield plaque d'essai pour Arduino Uno
1×Recommandé: Boîtier pour Arduino Uno
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Arduino Uno

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À Propos des Boutons

Découvrez les boutons (brochage, câblage, anti-rebond) dans ces tutoriels :

Schéma de Câblage

Schéma de Câblage Boutons Multiples Arduino UNO Q

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Code MCU — Boutons Multiples avec Anti-rebond

L'Arduino UNO Q dispose de deux processeurs : le STM32 MCU (gère le contrôle matériel en temps réel) et le Qualcomm MPU (exécute Debian Linux). Dans cette section, seul le STM32 MCU est programmé — le côté Linux reste inactif. Une section ultérieure montrera comment les deux processeurs fonctionnent ensemble.

La bibliothèque ezButton gère l'anti-rebond et la détection pression/relâchement pour chaque bouton automatiquement — aucun suivi manuel d'horodatage requis :

/* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 */ } }

Étapes Rapides

  • Première utilisation d'Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q pour préparer votre environnement de développement avant de continuer.
  • Câblez les boutons : Connectez cinq boutons sur les broches 2 à 6 selon le schéma de câblage. Chaque bouton a une broche sur GND et l'autre sur la broche de signal.
  • Connectez : Branchez l'Arduino UNO Q à votre ordinateur avec un câble USB-C.
  • Ouvrez Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre Arduino UNO Q.
  • Créez une nouvelle App : Cliquez sur le bouton Create New App.
Créer une Nouvelle App dans Arduino App Lab sur Arduino UNO Q
  • Donnez un nom à l'App, par exemple : DIYables_MultiButton
  • Cliquez sur Create pour confirmer.
  • Vous verrez un ensemble de dossiers et de fichiers générés dans votre nouvelle App.
Dossiers et fichiers de l'App Arduino App Lab sur Arduino UNO Q
  • Trouvez le fichier sketch/sketch.ino — c'est là que vous collerez le sketch MCU.
  • Collez le sketch : Copiez le code MCU ci-dessus et collez-le dans le fichier sketch. Conservez les autres fichiers par défaut.
    • 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
    • Téléversez : Cliquez sur le bouton Run dans Arduino App Lab pour compiler et téléverser vers le STM32.
    Cliquer sur le bouton Run dans Arduino App Lab sur Arduino UNO Q
    • Appuyez sur les boutons un par un — appuyez et relâchez chaque bouton et voyez le résultat dans la section Bridge ci-dessous.
    • Conseil Pro : Ajoutez du code d'action dans chaque bloc isPressed() / isReleased() pour contrôler des LEDs, des servos ou d'autres composants.

    Code Plus Propre avec un Tableau de Boutons

    Utiliser un tableau d'objets ezButton rend le code évolutif — ajouter plus de boutons ne nécessite que de changer BUTTON_NUM :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }
    • Fonctionnement : La boucle traite tous les boutons de manière générique en utilisant l'index du tableau. Les événements pression/relâchement de chaque bouton déclenchent des actions indépendantes.
    • Conseil Pro : Ajoutez un tableau de compteurs (int press_count[BUTTON_NUM] = {0}) et incrémentez press_count[i] à chaque isPressed() pour suivre combien de fois chaque bouton a été pressé.

    Programmation Bridge Linux + MCU

    L'Arduino UNO Q dispose de deux processeurs qui fonctionnent ensemble : le MPU (Qualcomm, exécute Debian Linux) et le MCU (STM32, exécute Zephyr OS avec votre sketch Arduino). Ils communiquent via RPC grâce à la bibliothèque Arduino_RouterBridge — jamais via des ports série bruts.

    • Tous les boutons sont connectés au MCU (STM32) — câblés aux broches d'entrée numériques du STM32. Le MCU gère l'anti-rebond et le comptage des pressions avec ezButton.
    • Le MPU ne peut pas lire les boutons directement — il doit demander des données au MCU via Bridge.call(). Le MCU répond avec les comptages de pressions ou les réinitialise.
    • Le MPU dispose du Wi-Fi — parce que le MPU exécute Debian Linux complet avec Wi-Fi, il peut transmettre les comptages de pressions via Telegram et accepter des commandes de réinitialisation à distance.
    • Communication : Bridge.call() côté Linux invoque des fonctions Bridge.provide() côté MCU
    • ⚠️ Réservé : /dev/ttyHS1 (Linux) et Serial1 (MCU) sont utilisés par l'Arduino Router — ne les ouvrez jamais directement

    En bref : Le MCU compte les pressions de boutons → le MPU demande les comptages → le MPU les transmet via Telegram.

    Sketch MCU — boutons multiples avec comptage de pressions et Bridge :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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"); } }

    Script Python (Arduino App Lab) — interroge les comptages de pressions depuis Linux :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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)
    • Remarque : Assurez-vous que Bridge.begin() est appelé dans le sketch MCU et que le sketch est téléversé avant d'exécuter le script Python côté Linux.
    • ⚠️ Avertissement : N'ouvrez jamais directement /dev/ttyHS1 (sur Linux) ni n'utilisez Serial1 (sur MCU) dans votre code — ils sont réservés par l'Arduino Router et y accéder cassera le Bridge.

    Étapes Rapides

    • Téléversez le sketch MCU : Ouvrez Arduino App Lab, créez une nouvelle App, collez le sketch Bridge MCU ci-dessus dans sketch/sketch.ino, installez les bibliothèques ezButton et Arduino_RouterBridge, et cliquez sur Run.
    • Ajoutez le script Python : Collez le code Python ci-dessus dans l'onglet Python de la même App.
    • Exécutez l'App : Cliquez sur Run — le côté Python interroge les comptages de pressions toutes les 5 secondes.
    • Appuyez sur les boutons plusieurs fois.
    • Vérifiez la console : Ouvrez l'onglet Console → sous-onglet MCU Monitor pour voir les événements pression/relâchement.

    Sortie de la Console App Lab

    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

    Intégration Telegram

    Interrogez les comptages de pressions de boutons ou réinitialisez-les à distance via Telegram.

    Si vous n'avez pas encore de bot Telegram, consultez Arduino UNO Q - Bot Telegram pour obtenir votre token de bot avant de continuer.

    Sketch MCU : Conservez le même sketch MCU de la section Bridge précédente — aucune modification nécessaire. Assurez-vous qu'il est déjà téléversé et en cours d'exécution sur le STM32 avant de continuer.

    Script Python (Arduino App Lab) — bot Telegram pour le suivi de boutons multiples :

    /* * Ce code Arduino UNO Q a été développé par newbiely.fr * Ce code Arduino UNO Q est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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)
    • Remarque : Remplacez YOUR_BOT_TOKEN par le token obtenu depuis @BotFather sur Telegram.
    • Envoyez /counts pour obtenir les comptages de pressions des cinq boutons.
    • Envoyez /reset pour réinitialiser tous les comptages à zéro.

    Étapes Rapides

    • Téléversez le sketch MCU : Utilisez le sketch Bridge MCU de la section précédente (téléversez-le d'abord si ce n'est pas déjà fait).
    • Collez le script Telegram : Copiez le code Python ci-dessus dans l'onglet Python de votre App dans Arduino App Lab.
    • Définissez votre token : Remplacez YOUR_BOT_TOKEN dans le script par votre token de bot réel.
    • Exécutez l'App : Cliquez sur Run — le bot commence à écouter les messages Telegram.
    • Testez : Appuyez sur chaque bouton plusieurs fois, puis envoyez /counts sur Telegram. Ensuite envoyez /reset pour effacer tous les comptages.

    Sortie de la Console App Lab

    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

    Intégration d'OpenClaw

    Vous pouvez adapter OpenClaw à ce tutoriel en vous référant aux instructions du tutoriel Arduino UNO Q - OpenClaw.

    Idées d'Applications/Projets

    • Panneau clavier : Chaque bouton envoie un message Telegram différent — utile pour des préréglages rapides ou des commandes
    • Compteur de votes : Chaque bouton enregistre un vote pour une option différente ; interrogez les résultats via Telegram
    • Sélecteur de mode : Appuyez sur le bouton 1 pour le mode A, le bouton 2 pour le mode B — chacun déclenche une action différente sur le MPU
    • Alarme multi-zones : Chaque bouton est lié à un capteur de zone différent ; les comptages de pressions enregistrent combien de fois chaque zone a été déclenchée
    • Panneau de test à distance : Appuyez sur les boutons pour tester différentes fonctionnalités matérielles, avec les résultats envoyés via Telegram

    Défiez-vous

    • Facile : Ajoutez un sixième bouton au sketch sur la broche 7 et suivez son comptage de pressions de la même manière
    • Moyen : Modifiez le sketch Bridge pour exposer get_count(int button_num) afin que Python puisse interroger les comptages individuels de boutons au lieu de tous à la fois
    • Avancé : Construisez un bot Telegram qui envoie une alerte automatiquement lorsque le comptage de pressions d'un bouton dépasse un seuil (par ex. 10 pressions)

    Références des Fonctions

    ※ NOS MESSAGES

    • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !