from machine import Pin
import time
# 1. Configuración de los Pines
# LED interno de la placa (parpadea en el bucle principal)
led_interno = Pin("LED", Pin.OUT)
# LED externo en el pin 6 (cambia de estado con la interrupción)
led_externo = Pin(6, Pin.OUT, value=0)
# Botón en el pin 18 con resistencia de Pull-Down interna
boton = Pin(18, Pin.IN, Pin.PULL_UP)
# Variables globales para el control del anti-rebote (debouncing)
ultima_interrupcion = 0
TIEMPO_REBOTE_MS = 200 # Tiempo de espera mínimo entre pulsaciones
# 2. Rutina de Servicio de Interrupción (ISR)
def cambiar_led_externo(pin):
global ultima_interrupcion
tiempo_actual = time.ticks_ms()
# Verifica si ha pasado suficiente tiempo desde el último flanco
if time.ticks_diff(tiempo_actual, ultima_interrupcion) > TIEMPO_REBOTE_MS:
led_externo.toggle() # Conmuta el estado del LED en el pin 6
ultima_interrupcion = tiempo_actual
# 3. Asignación de la Interrupción Externa
# Se dispara en el flanco de subida (cuando pasa de 0V a 3.3V al presionar)
boton.irq(trigger=Pin.IRQ_RISING, handler=cambiar_led_externo)
# 4. Bucle Principal (Main Loop)
while True:
led_interno.toggle() # Parpadea el LED de la placa
time.sleep(0.2) # Frecuencia de parpadeo (200 ms)