bouton-interruption.py

Raspberry Pi Pico 2 · Fichier : bouton-interruption.py · Langage : Python · Usage : Basculer une LED sur appui bouton avec interruption matérielle

Le bouton câblé sur GP15 bascule la LED grâce à une interruption matérielle (irq) : aucun cycle processeur perdu à scruter la broche. Un filtre de 50 ms dans le handler élimine les rebonds mécaniques du contact.

Matériel requis

Une Raspberry Pi Pico 2 (RP2350 double Cortex-M33 @ 150 MHz) avec MicroPython installé, alimentée par USB. 1 bouton poussoir (une patte sur GP15, autre patte sur GND).

Câblage

Bouton entre GP15 et GND ; la résistance de tirage est activée par Pin.PULL_UP côté carte.

Fonctionnement

BTN.irq déclenche sur front descendant (appui vers GND). Le handler compare time.ticks_ms() au dernier front et ignore les rebonds de moins de 50 ms, puis inverse l'état de la LED.

Exécution

Installer le MicroPython « Pico 2 » (maintenir BOOTSEL, brancher l'USB, déposer le .uf2), puis copier le script via Thonny. Démarrage automatique avec le nom main.py.

Variantes

Passez la gâchette à Pin.IRQ_RISING | Pin.IRQ_FALLING pour compter tous les fronts, ou empilez plusieurs boutons avec un handler par broche.

bouton-interruption.py

# Bascule LED sur appui bouton : interruption materielle + anti-rebond.
from machine import Pin
import time

BTN = Pin(15, Pin.IN, Pin.PULL_UP)  # bouton vers GND
LED = Pin(25, Pin.OUT)

etat_led = [0]           # liste mutable : modifiable dans le handler
dernier = [0]            # horodatage du dernier front valide

def sur_appui(pin):
    maintenant = time.ticks_ms()
    # Anti-rebond : on ignore les fronts de moins de 50 ms apres le dernier.
    if time.ticks_diff(maintenant, dernier[0]) < 50:
        return
    dernier[0] = maintenant
    etat_led[0] = 1 - etat_led[0]
    LED.value(etat_led[0])
    print("Appui -> LED", "ON" if etat_led[0] else "OFF")

BTN.irq(trigger=Pin.IRQ_FALLING, handler=sur_appui)
print("Pret : appuyez sur le bouton (GP15)")

while True:
    time.sleep_ms(100)   # le handler s'execute en interruption

← Retour à la fiche