"""
Ejercicio básico: encender y apagar un LED con interrupción
Objetivo:
Comprender cómo usar una interrupción externa en un ESP32-WROOM con MicroPython,
detectando la pulsación de un botón para cambiar el estado de un LED.
Una interrupción es un mecanismo que permite a un microcontrolador detener momentáneamente
la ejecución normal de su programa para atender un evento específico que ocurre en tiempo real.
Cuando ocurre ese evento (por ejemplo, presionar un botón), el microcontrolador:
Pausa lo que estaba haciendo, Ejecuta una función especial llamada rutina de atención de interrupción (ISR),
Y luego retoma el programa principal desde donde lo dejó.
Enunciado:
Desarrolle un programa en MicroPython para un ESP32-WROOM en Wokwi, donde un pulsador active una interrupción.
Cada vez que se presione el pulsador:
si el LED está apagado, debe encenderse,
si el LED está encendido, debe apagarse.
"""
from machine import Pin
import time
# -----------------------------
# Configuración de pines
# -----------------------------
led = Pin(2, Pin.OUT) # LED conectado al GPIO 2
boton = Pin(14, Pin.IN, Pin.PULL_UP) # Botón conectado al GPIO 14 con pull-up interna
# Variable global para guardar el estado del LED
estado_led = False
# -----------------------------
# Función de interrupción
# -----------------------------
def atender_interrupcion(pin):
global estado_led
# Cambia el estado lógico almacenado
estado_led = not estado_led
# Actualiza el LED físicamente
led.value(estado_led)
# -----------------------------
# Configuración de la interrupción
# -----------------------------
# Se detecta flanco de bajada, porque con pull-up:
# - sin presionar: el pin está en 1
# - al presionar: el pin pasa a 0
boton.irq(trigger=Pin.IRQ_FALLING, handler=atender_interrupcion)
# -----------------------------
# Bucle principal
# -----------------------------
while True:
0.1
"""
from machine import Pin
import time
led = Pin(2, Pin.OUT)
boton = Pin(14, Pin.IN, Pin.PULL_UP)
estado_led = False
def atender_interrupcion(pin):
global estado_led
estado_led = not estado_led
led.value(estado_led)
if estado_led:
print("LED encendido")
else:
print("LED apagado")
boton.irq(trigger=Pin.IRQ_FALLING, handler=atender_interrupcion)
while True:
time.sleep(0.1)
"""