bouton-interruption.py

RP2040 (placa genérica / chip) · Archivo : bouton-interruption.py · Lenguaje : Python · Uso : Basculer une LED sur appui bouton avec interruption matérielle

El botón cableado a GP15 alterna el LED mediante una interrupción hardware (irq): no se pierde ningún ciclo de CPU escrutando el pin. Un filtro de 50 ms dentro del handler elimina los rebotes mecánicos del contacto.

Hardware

Una placa genérica con microcontrolador RP2040 (doble Cortex-M0+) programada en MicroPython. 1 botón pulsador (una pata a GP15, la otra a GND).

Cableado

Botón entre GP15 y GND; la resistencia de pull-up la activa Pin.PULL_UP en la placa.

Funcionamiento

BTN.irq se dispara con el flanco de bajada (pulsación a masa). El handler compara time.ticks_ms() con el último flanco, ignora rebotes de menos de 50 ms e invierte el estado del LED.

Ejecución

Graba MicroPython vía BOOTSEL (archivo .uf2) y copia el script en la unidad de la placa. Comprueba el pin del LED de usuario de tu placa (a menudo GP25) y adáptalo si hace falta.

Variantes

Cambia el disparo a Pin.IRQ_RISING | Pin.IRQ_FALLING para contar todos los flancos, o apila varios botones con un handler por pin.

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

← Volver a la ficha