############################
# E007_2LED_PULSADOR_IRQ.PY: Activa 2 LED segun pulsador
# Escaneo del botón por interrupción (IRQ)
# ENTRADAS: Estado del pulsador
# SALIDAS: GPIO26 verde y GPIO27 rojo
############################
print("Hello, ESP32!")
import time
from machine import Pin
# Configuración de pines
pin_pulsador = Pin(25, Pin.IN, Pin.PULL_DOWN) # Pulldown de 10k
led_verde = Pin(27, Pin.OUT)
led_rojo = Pin(14, Pin.OUT)
# Estado inicial: LEDs apagados
led_verde.off()
led_rojo.off()
flag = True # Comienza con el LED Verde al pulsar el botón.
print ('\n' * 50) # Imprime 50 líneas en blanco para "limpiar" la consola
print ('Captura de pulsador sin rebotes')
print ('Pulsa botón')
# Función de interrupción para el botón
def boton_irq(pin):
global flag
if pin.value() == 1: # Si el pulsador sigue presionado
time.sleep(.001) # Hace una espera para evitar rebotes, ajustar según botón
if pin.value() == 1: # Verifica nuevamente si el pulsador sigue presionado
print('\n' * 50) # Imprime 50 líneas en blanco para "limpiar" la consola
if flag:
led_verde.off() # Apaga el LED verde
led_rojo.on() # Enciende el LED rojo
print("Rojo")
flag = False
else:
led_verde.on() # Enciende el LED verde
led_rojo.off() # Apaga el LED rojo
print("Verde")
flag = True
print ('Pulsa botón')
# Configuración de interrupcion para el botón, se activa en HIGH
# y al activarse la IRQ se llama a la función boton_irq()
pin_pulsador.irq(trigger=Pin.IRQ_RISING, handler=boton_irq)
try:
while True:
time.sleep(.1) # Simula el bucle principal de un script
except KeyboardInterrupt:
print('\n' * 50) # Imprime 50 líneas en blanco para "limpiar" la consola
print("Programa finalizado...")
finally:
# Apaga ambos LEDs al salir del bucle
led_verde.off()
led_rojo.off()