from machine import Pin
import time
# 1. Configuración de los Pines
led_interno = Pin("LED", Pin.OUT)
led_externo = Pin(6, Pin.OUT, value=0)
boton = Pin(18, Pin.IN, Pin.PULL_UP)
# Variables de control de tiempo (no bloqueante)
ultimo_parpadeo = time.ticks_ms()
INTERVALO_PARPADEO_MS = 200
# Variables para la detección de flanco del botón (Polling)
estado_anterior_boton = 0
ultima_lectura_boton = time.ticks_ms()
TIEMPO_DEBOUNCE_MS = 50
# 2. Bucle Principal (Polling Loop)
while True:
tiempo_actual = time.ticks_ms()
# --- TAREA 1: Parpadeo del LED Interno (Sin bloquear el CPU) ---
if time.ticks_diff(tiempo_actual, ultimo_parpadeo) >= INTERVALO_PARPADEO_MS:
led_interno.toggle()
ultimo_parpadeo = tiempo_actual
# --- TAREA 2: Sondeo (Polling) del Botón con Detección de Flanco ---
# Filtramos lecturas muy rápidas para el anti-rebote
if time.ticks_diff(tiempo_actual, ultima_lectura_boton) >= TIEMPO_DEBOUNCE_MS:
estado_actual_boton = boton.value()
# Detectamos el flanco de subida: antes 0, ahora 1
if estado_actual_boton == 1 and estado_anterior_boton == 0:
led_externo.toggle() # Conmuta el LED del pin 6
# Actualizamos los estados para el próximo ciclo
estado_anterior_boton = estado_actual_boton
ultima_lectura_boton = tiempo_actual