Arduino UNO Q - Bouton

Le bouton poussoir est l'un des composants les plus fondamentaux dans les projets Arduino. Ce tutoriel vous apprend tout ce dont vous avez besoin pour utiliser correctement un bouton avec Arduino UNO Q — de la lecture de son état à la détection des événements d'appui et de relâchement, et même la vérification de l'état du bouton à distance via Telegram.

※ Note:

Avant de commencer, voici deux erreurs courantes pour les débutants à surveiller :

  1. Problème d'entrée flottante :
  • Symptôme : La broche du bouton lit des valeurs imprévisibles même quand le bouton n'est pas appuyé.
  • Cause : Aucune résistance de tirage haute ou basse n'est connectée.
  • Solution : Utilisez le mode INPUT_PULLUP dans le code Arduino — cela active la résistance de tirage haute interne et ne nécessite aucun composant externe.
  1. Phénomène de chattering :
  • Symptôme : Un appui physique s'enregistre comme plusieurs événements d'appui.
  • Cause : Le rebond mécanique provoque des transitions HIGH/LOW rapides.
  • Solution : Implémentez l'anti-rebond. Voir le tutoriel Arduino UNO Q - Anti-rebond du Bouton.

Le chattering n'affecte que les applications qui ont besoin d'un comptage précis des appuis. Pour un simple contrôle ALLUMÉ/ÉTEINT, cela n'a généralement pas d'importance.

Arduino UNO Q - Bouton

Matériel Requis

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×Bouton avec capuchon pour plaque d'essai
1×Kit bouton pour plaque d'essai
1×Panel-mount Button
1×Module bouton poussoir
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 du Bouton

Un bouton poussoir (aussi appelé bouton tactile ou interrupteur momentané) est fermé pendant qu'il est maintenu appuyé et s'ouvre quand il est relâché. Les types courants comprennent :

  • Boutons pour circuit imprimé — peuvent être utilisés sur une plaque d'essai
  • Boutons pour panneau — pour le montage dans des boîtiers
Bouton poussoir Arduino UNO Q

Brochage

Les boutons pour circuit imprimé ont généralement quatre broches — connectées par paires en interne. Seules deux broches (pas la paire connectée en interne) sont nécessaires.

Brochage du bouton
Comment utiliser le bouton

Les boutons pour panneau ont deux broches :

Brochage du bouton poussoir à deux broches

Fonctionnement

  • Quand le bouton n'est pas appuyé : la broche A et la broche B sont déconnectées
  • Quand le bouton est appuyé : la broche A et la broche B sont connectées
Fonctionnement du bouton

Connexion du Bouton et Logique

Connectez une broche du bouton à GND et l'autre à une broche Arduino UNO Q configurée en INPUT_PULLUP :

  • Bouton non appuyé → la broche lit HIGH
  • Bouton appuyé → la broche lit LOW

※ Note:

Utiliser INPUT_PULLUP active la résistance de tirage haute interne — aucune résistance externe n'est nécessaire. C'est l'approche recommandée pour les débutants.

Schéma de Câblage

  • Câblage pour bouton sur circuit imprimé :
Schéma de câblage Arduino UNO Q Bouton

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

  • Câblage pour bouton sur panneau :
Schéma de câblage Arduino UNO Q Bouton Panneau

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

Comment Programmer un Bouton

Configurez la broche du bouton en entrée avec tirage haute interne :

pinMode(7, INPUT_PULLUP);

Lisez l'état du bouton :

int button_state = digitalRead(BUTTON_PIN); // LOW = appuyé, HIGH = non appuyé

※ Note:

Deux cas d'utilisation courants :

  • Basé sur le niveau : Si HIGH → faire action A ; si LOW → faire action B (ex. allumer la LED pendant qu'il est maintenu)
  • Basé sur le front : Quand l'état passe de HIGH à LOW → événement d'appui ; de LOW à HIGH → événement de relâchement (ex. basculer la LED à chaque appui)

Code MCU — Lecture de l'État du Bouton

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

Ce programme lit l'état du bouton et rend le résultat disponible pour utilisation (ex. contrôler une LED ou rapporter via 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-button */ #define BUTTON_PIN 7 // The Arduino UNO Q pin connected to the button void setup() { // initialize the pushbutton pin as a pull-up input // (no external resistor needed — internal pull-up is used) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the button (LOW = pressed, HIGH = not pressed) int button_state = digitalRead(BUTTON_PIN); // TO DO: use button_state here (e.g., control an LED or send via Bridge) delay(100); }

Étapes Rapides

  • Première utilisation de l'Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q pour préparer votre environnement de développement avant de continuer.
  • Câbler le bouton : Connectez une broche du bouton à GND et l'autre à la broche 7 selon le schéma de câblage.
  • Connecter : Branchez l'Arduino UNO Q sur votre ordinateur avec un câble USB-C.
  • Ouvrir Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre Arduino UNO Q.
  • Créer une nouvelle application : Cliquez sur le bouton Créer une nouvelle application.
Créer une nouvelle application dans Arduino App Lab sur Arduino UNO Q
  • Donnez un nom à l'application, par exemple : DIYables_Button
  • Cliquez sur Créer pour confirmer.
  • Un ensemble de dossiers et de fichiers sera généré dans votre nouvelle application.
Dossiers et fichiers de l'application Arduino App Lab sur Arduino UNO Q
  • Trouvez le fichier sketch/sketch.ino — c'est là que vous collerez le programme MCU.
  • Coller le programme : Copiez le code MCU ci-dessus et collez-le dans le fichier de programme. Laissez 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 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éverser : Cliquez sur le bouton Exécuter dans Arduino App Lab pour compiler et téléverser sur le STM32.
    Cliquer sur le bouton Exécuter dans Arduino App Lab sur Arduino UNO Q
    • Appuyez sur le bouton : Appuyez et maintenez le bouton, puis relâchez-le.
    • Voir l'état : Pour voir la sortie de l'état du bouton en temps réel, voir la section Bridge ci-dessous — elle ajoute une fonction get_button_state() et affiche l'état via la console du Moniteur MCU.
    • Conseil : Utilisez button_state == LOW pour vérifier si le bouton est appuyé (car INPUT_PULLUP inverse la logique).

    Code MCU — Détection des Événements d'Appui et de Relâchement

    Pour détecter les événements individuels d'appui et de relâchement, suivez les transitions d'état entre HIGH et LOW :

    /* * 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-button */ #define BUTTON_PIN 7 // The Arduino UNO Q pin connected to the button int button_state; int prev_button_state = HIGH; // HIGH = not pressed (pull-up) void setup() { // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the button (LOW = pressed, HIGH = not pressed) button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) { // button was just pressed (HIGH → LOW transition) // TO DO: add your press action here } else if (prev_button_state == LOW && button_state == HIGH) { // button was just released (LOW → HIGH transition) // TO DO: add your release action here } // save the last state prev_button_state = button_state; }
    • Fonctionnement : Détecte une transition HIGHLOW (bouton appuyé) et une transition LOWHIGH (bouton relâché).
    • Conseil : Ajoutez du code d'action dans les blocs if — par exemple, basculer une LED à l'appui, ou enregistrer un événement au relâchement.

    ※ Note:

    • Appuyer une fois peut déclencher plusieurs événements à cause du rebond mécanique (chattering). Voir le Arduino UNO Q - Anti-rebond du Bouton pour une solution propre.
    • Pour les projets multi-boutons, utilisez la bibliothèque ezButton — elle gère la tirage haute, l'anti-rebond et la détection de front automatiquement. En savoir plus sur ezButton ici.

    Programmation Bridge Linux + MCU

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

    • Le bouton est connecté au MCU (STM32) — câblé à une broche d'entrée numérique du STM32. Le MCU lit l'état du bouton en utilisant digitalRead().
    • Le MPU ne peut pas lire le bouton directement — il doit demander l'état actuel au MCU via Bridge.call(). Le MCU exécute la fonction Bridge.provide() enregistrée et répond.
    • Le MPU dispose du Wi-Fi — car le MPU exécute Debian Linux complet avec Wi-Fi, il peut vérifier l'état du bouton à la demande et le transmettre via Telegram.
    • Communication : Bridge.call() côté Linux invoque Bridge.provide() côté MCU
    • ⚠️ Réservé : /dev/ttyHS1 (Linux) et Serial1 (MCU) sont utilisés par le routeur Arduino — ne les ouvrez jamais directement

    En résumé : Le MPU demande l'état du bouton → le MCU lit la broche → le MCU rapporte le résultat → le MPU enregistre ou transmet.

    Programme MCU — bouton avec Bridge et sortie du Moniteur :

    /* * 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-button */ #include "Arduino_RouterBridge.h" #define BUTTON_PIN 7 int button_state; int prev_button_state = HIGH; void get_button_state() { button_state = digitalRead(BUTTON_PIN); int pressed = (button_state == LOW) ? 1 : 0; Monitor.println("Button state: " + String(pressed) + " (1=pressed, 0=released)"); } void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); Bridge.begin(); Monitor.begin(); Bridge.provide("get_button_state", get_button_state); Monitor.println("Button Bridge ready"); } void loop() { button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Monitor.println("Button PRESSED"); else if (prev_button_state == LOW && button_state == HIGH) Monitor.println("Button RELEASED"); prev_button_state = button_state; }

    Script Python (Arduino App Lab) — interrogation de l'état du bouton 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-button */ from arduino.app_utils import * import time def loop(): while True: result = Bridge.call("get_button_state") print(f"Polled: {result}") time.sleep(0.5) App.run(user_loop=loop)
    • Remarque : Assurez-vous que Bridge.begin() est appelé dans le programme MCU et que le programme est téléversé avant d'exécuter le script Python côté Linux.
    • ⚠️ Avertissement : N'ouvrez jamais directement /dev/ttyHS1 (sous Linux) ou Serial1 (sur MCU) dans votre code — ces ports sont réservés par le routeur Arduino et y accéder brisera le Bridge.

    Étapes Rapides

    • Téléversez le programme MCU : Ouvrez Arduino App Lab, créez une nouvelle application, collez le programme MCU Bridge ci-dessus dans sketch/sketch.ino, conservez les bibliothèques par défaut, puis cliquez sur Exécuter.
    • Ajoutez le script Python : Collez le code Python ci-dessus dans l'onglet Python de la même application.
    • Exécutez l'application : Cliquez sur Exécuter — le côté Python interroge l'état du bouton toutes les 0,5 secondes.
    • Appuyez sur le bouton : Appuyez et maintenez, puis relâchez.
    • Vérifiez la console : Ouvrez l'onglet Console → sous-onglet Moniteur MCU pour voir les événements d'appui/relâchement en temps réel.
    • Conseil : Ouvrez également le sous-onglet Console Python pour voir les valeurs d'état interrogées.

    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
    Button Bridge ready Button PRESSED Button RELEASED Button PRESSED Button RELEASED

    Intégration Telegram

    Vous pouvez vérifier si le bouton est actuellement appuyé — depuis n'importe où dans le monde — en envoyant un message Telegram à votre Arduino UNO Q.

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

    Cette section couvre :

    • Exécuter un script Python côté Linux de l'Arduino UNO Q pour écouter les messages Telegram
    • Interroger l'état du bouton depuis le MCU via Bridge.call() à la demande
    • Renvoyer l'état du bouton à Telegram comme réponse

    Programme MCU : Conservez le même programme 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 l'état du bouton :

    /* * 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-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 == "/state": result = Bridge.call("get_button_state") # result contains "1" (pressed) or "0" (not pressed) if "1" in str(result): send_message(chat_id, "Button is currently PRESSED") else: send_message(chat_id, "Button is currently NOT pressed") else: send_message(chat_id, "Commands:\n/state — check if the button is pressed") time.sleep(0.5) App.run(user_loop=loop)
    • Remarque : Remplacez YOUR_BOT_TOKEN par le token obtenu depuis @BotFather sur Telegram.
    • Envoyez /state pour vérifier si le bouton est actuellement appuyé.

    Étapes Rapides

    • Téléversez le programme MCU : Utilisez le programme MCU Bridge de la section précédente (téléversez-le d'abord s'il ne l'est pas déjà).
    • Collez le script Telegram : Copiez le code Python ci-dessus dans l'onglet Python de votre application dans Arduino App Lab.
    • Définissez votre token : Remplacez YOUR_BOT_TOKEN dans le script par votre vrai token de bot.
    • Exécutez l'application : Cliquez sur Exécuter — le bot commence à écouter les messages Telegram immédiatement.
    • Testez : Ouvrez Telegram, trouvez votre bot, appuyez sur le bouton physique de l'Arduino UNO Q, puis envoyez /state pour voir s'il indique appuyé.
    • Conseil : Combinez avec une LED — allumez-la quand le bouton est détecté comme appuyé via Bridge.

    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: /state [2026-04-29 12:00:01] Button is currently NOT pressed [2026-04-29 12:01:30] Telegram: /state [2026-04-29 12:01:30] Button is currently PRESSED
    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
    /state
    10:15 AM ✓✓
    Button is currently NOT pressed
    10:16 AM
    /state
    10:17 AM ✓✓
    Button is currently PRESSED
    10:18 AM

    ※ 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 !