Bases · 3 min de lecture

Brancher un bouton-poussoir sur Arduino : pull-up, pull-down et anti-rebond

Comment brancher un bouton-poussoir sur Arduino ? L'intérieur du bouton à 4 pattes, les résistances de pull-up et pull-down, INPUT_PULLUP, l'anti-rebond et un exemple pour allumer et éteindre une LED.

Le bouton-poussoir est le composant le plus simple pour faire entrer le geste de l'utilisateur dans un projet Arduino. Appuyé, il relie deux contacts ; relâché, il les sépare. Aussi simple qu'il paraisse, mal branché il donne des lectures aléatoires ou compte un appui plusieurs fois. Dans ce guide, on explique comment le brancher et le lire correctement.

Bouton-poussoir
Bouton tactile à 4 pattes. Les pattes sont reliées deux à deux à l'intérieur.

L'intérieur d'un bouton à 4 pattes

Le bouton tactile 6×6 mm, le plus utilisé sur breadboard, a 4 pattes mais seulement 2 points de connexion : les paires de pattes opposées sont déjà reliées à l'intérieur. L'appui relie les deux paires. Si tu places le bouton à cheval sur le canal central de la breadboard, chaque paire tombe dans des rangées différentes et la bonne orientation devient évidente.

En cas de doute, mets ton multimètre en mode continuité : les pattes qui bipent sans appui forment une paire déjà reliée. Celles qui bipent seulement à l'appui sont celles que le bouton commute.

Pourquoi faut-il une résistance de pull-up ou de pull-down ?

Quand le bouton n'est pas appuyé, la broche d'entrée de l'Arduino n'est reliée à rien ; on parle d'entrée flottante. Une telle broche capte le bruit électrique et lit HIGH ou LOW au hasard. La solution consiste à tirer la broche vers un niveau fixe via une résistance :

MéthodeBranchementRelâchéAppuyé
Pull-down10 kΩ broche → GND, bouton broche → 5VLOWHIGH
Pull-up (externe)10 kΩ broche → 5V, bouton broche → GNDHIGHLOW
INPUT_PULLUP (interne)Bouton broche → GND, sans résistanceHIGHLOW

Le plus pratique est pinMode(broche, INPUT_PULLUP) : la résistance interne de l'Arduino, d'environ 20 à 50 kΩ, est activée et tu branches simplement le bouton entre la broche et le GND. La seule différence : la logique est inversée, un appui se lit LOW.

Anti-rebond : pourquoi un appui compte-t-il plusieurs fois ?

Au moment où les contacts métalliques se touchent, ils vibrent pendant quelques millisecondes et le circuit s'ouvre et se ferme plusieurs fois. Comme l'Arduino lit très vite, il peut voir un appui comme 3 à 5 appuis. C'est le rebond des contacts. Pour le corriger en logiciel, on ignore les changements pendant environ 50 ms après le dernier changement.

const int BUTTON_PIN = 2;   // buton pin ile GND arasında / button between pin and GND
const int LED_PIN = 13;     // karttaki LED / onboard LED

bool ledOn = false;
int lastReading = HIGH;
int stableState = HIGH;
unsigned long lastChange = 0;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP); // dahili pull-up / internal pull-up
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int reading = digitalRead(BUTTON_PIN);
  if (reading != lastReading) lastChange = millis();   // değişti / changed
  if (millis() - lastChange > 50 && reading != stableState) {
    stableState = reading;                              // 50 ms kararlı / stable for 50 ms
    if (stableState == LOW) {                           // basıldı / pressed
      ledOn = !ledOn;                                   // LED'i değiştir / toggle LED
      digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
    }
  }
  lastReading = reading;
}

Ce code inverse l'état de la LED une fois par appui ; maintenir le bouton ne la fait pas clignoter. Comme il utilise millis() au lieu de delay(), la boucle n'attend jamais et peut faire autre chose en même temps.

Erreurs fréquentes

  • Placer le bouton dans le mauvais sens : si tu utilises une paire de pattes déjà reliée, le bouton est lu comme toujours appuyé. Tourne-le de 90°.
  • Ne pas mettre de résistance : sans pull-up ni pull-down, la lecture change au hasard.
  • Attendre la mauvaise logique avec INPUT_PULLUP : un appui se lit LOW, pas HIGH ; écris tes conditions en conséquence.
  • Utiliser un long delay() comme anti-rebond : le programme ne peut rien faire pendant ce temps ; mieux vaut temporiser avec millis().
  • Utiliser les broches 34 à 39 de l'ESP32 : elles n'ont pas de pull-up interne ; ajoute une résistance externe ou choisis une autre broche.

Pour bien placer le bouton et la résistance sur la breadboard, lis Qu'est-ce qu'une breadboard ? ; pour comprendre la valeur des pull-up, Qu'est-ce qu'une résistance ?.

Questions fréquentes

Quelle résistance faut-il pour un bouton ?

10 kΩ est la valeur standard pour un pull-up ou un pull-down. Avec INPUT_PULLUP, aucune résistance externe n'est nécessaire.

Pourquoi le bouton se lit-il LOW quand on appuie ?

Avec INPUT_PULLUP ou un pull-up externe, la broche est normalement à HIGH ; le bouton la relie au GND, donc elle passe à LOW à l'appui. C'est le comportement attendu.

Quelle durée d'anti-rebond choisir ?

20 à 50 ms suffisent pour la plupart des boutons. Les boutons anciens ou de mauvaise qualité peuvent demander 80 à 100 ms.

Comment lire plusieurs boutons ?

Branche chaque bouton sur sa propre broche et passe-les toutes en INPUT_PULLUP. Pour beaucoup de boutons, on utilise un clavier matriciel (keypad) ou une seule entrée analogique avec des résistances différentes.

Voir tous les projets
Brûleur à Led avec bouton poussoir (Push)
#9Débutant

Brûleur à Led avec bouton poussoir (Push)

Projet de commande instantanée (push) qui allume la LED lorsque le bouton est pressé et l'éteint lorsqu'il est relâché. Enseigne l'utilisation de la lecture de bouton et de l'expression conditionnelle

4.9(110)
176
Led brûlante avec bouton (marche-arrêt)
#10Débutant

Led brûlante avec bouton (marche-arrêt)

Un projet de bascule qui change l'état de la LED (on/off) à chaque pression sur un bouton. Enseigne les variables d'état et la logique de rebond.

4.8(100)
157
Piano simple avec buzzer et bouton
#26Avancé
Premium

Piano simple avec buzzer et bouton

Avec 8 boutons et un buzzer, un projet de piano simple qui peut jouer des notes de do à do aigu. Il permet d'apprendre à simuler un instrument de musique en assignant différentes fréquences à chaque b

4.9(66)
87
Afficheur et compteur à 7 segments avec bouton
#43Avancé
Premium

Afficheur et compteur à 7 segments avec bouton

Projet de compteur qui augmente, diminue et remet à zéro le nombre sur l'affichage à 7 segments à l'aide de 3 boutons. Enseigne le contrôle des limites et la logique des compteurs interactifs pour l'u

4.6(35)
46
ESP32 Contrôle de LED avec bouton poussoir (Push)
#104Débutant

ESP32 Contrôle de LED avec bouton poussoir (Push)

La LED s'allume lorsque le bouton est enfoncé et s'éteint lorsqu'il est relâché. Montre comment la broche d'entrée numérique de l'ESP32 et la résistance pull-up interne sont utilisées. Grâce au mode INPUT_PULLUP, aucune résistance externe n'est nécessaire.

4.6(36)
55
ESP32 Contrôle de LED avec bouton (Toggle)
#105Débutant

ESP32 Contrôle de LED avec bouton (Toggle)

Chaque fois que l'on appuie sur le bouton, la LED change d'état : si elle est allumée, elle s'éteint, si elle est éteinte, elle s'allume. Modèle classique de basculement. Avec le debounce, nous nettoyons le bruit mécanique du bouton-poussoir pour garantir un seul basculement avec une seule pression.

4.6(39)
56
Raspberry Pi Pico Bouton Toggle LED (GP14 + GP2)
#156Débutant
Premium

Raspberry Pi Pico Bouton Toggle LED (GP14 + GP2)

Bouton + LED — niveau supérieur ! 🔁 Contrairement à #155, pas besoin de maintenir le bouton. Appuie et relâche → LED allumée. Réappuie → LED éteinte (toggle). Même circuit que #155, mais grande différence de code. Apprends edge detection, state tracking et debounce.

0.0(0)
Raspberry Pi Pico Bouton Debounce : IRQ vs Software Polling (GP5 + GP4)
#159Intermédiaire
Premium

Raspberry Pi Pico Bouton Debounce : IRQ vs Software Polling (GP5 + GP4)

Une pression, le code compte 3-4 ? C'est le contact bounce ! 🔁 Compare 2 méthodes de comptage dans Serial : RAW polling (attrape bounce, compte faux) vs IRQ + software debounce (précis). Apprends physique du bounce, software debounce, Pin.irq() interrupt, IRQ_FALLING trigger, ISR handlers, sécurité des variables globales ISR.

0.0(0)

Découvre pourquoi un bouton seul se lit de façon instable, à quoi sert une résistance de pull-up, comment utiliser INPUT_PULLUP et comment l'anti-rebond compte correctement les appuis.