Bouton - Détecter un clic unique

Cet article présente le KY-004, un bouton poussoir facile à utiliser.

  • Découverte

Dans cette version, on veut qu’un bouton déclenche une seule action lorsqu’on appuie dessus, pas en continu, et sans attendre le relâchement pour déclencher l’action.

Le principe est donc :

  • on détecte l’instant où le bouton passe de relâché à appuyé
  • on empêche toute répétition tant qu’il reste enfoncé

Principe retenu

Bouton câblé en pull-up :

  • bouton relâché → 1
  • bouton appuyé → 0

On mémorise si le bouton a déjà été pris en compte.


Code simple et lisible (recommandé débutant)

from machine import Pin
import time

bouton = Pin(15, Pin.IN, Pin.PULL_UP)

clic_deja_pris = False

while True:
    if bouton.value() == 0 and clic_deja_pris == False:
        print("CLICK")
        clic_deja_pris = True      # empêche les répétitions
        time.sleep(0.05)           # petit debounce

    if bouton.value() == 1:
        clic_deja_pris = False     # prêt pour le prochain clic

    time.sleep(0.01)

Explication pas à pas

  • clic_deja_pris = False → indique si le clic a déjà été déclenché

  • Appui détecté (value() == 0)

    • si le clic n’a pas encore été pris :

      • on déclenche l’action
      • on bloque les répétitions
  • Bouton relâché (value() == 1)

    • on réarme le système pour le prochain clic

Comportement obtenu

Action utilisateur Résultat
Appui bref 1 clic
Bouton maintenu 5 s 1 clic
Appui répété 1 clic par appui
Rebond mécanique filtré

Pourquoi ça fonctionne bien pédagogiquement

  • aucune notion avancée (temps système, interruptions, FSM)

  • logique visible et compréhensible

  • facilement réutilisable dans :

    • feux de circulation
    • menus
    • compteurs
    • boutons piétons
    • quiz / buzzer

Variante encore plus compacte (si autorisée)

if bouton.value() == 0 and not clic_deja_pris:
    action()
    clic_deja_pris = True

À retenir (phrase clé)

Un clic est un événement unique, pas un état qui dure.

Pour aller plus loin