""" Botó com a interruptor. Temporització com a interrupció
Apagada amb uns quants parpelleixos previs
Proposta de ChatGPT """
from machine import Pin, Timer, deepsleep
import time
# Configuración del pin para el LED y el botón
led = Pin(23, Pin.OUT)
boto = Pin(15, Pin.IN, Pin.PULL_DOWN) # Configura el botón con una resistencia pull-down interna
# Variables globales
estat_led = False # Estado actual del LED
temps_inici_encens = 0 # Momento en que se enciende el LED
temps_encens = 5000 # Tiempo que el LED permanece encendido (en milisegundos)
parpadeos_restantes = 5 # Número de parpadeos antes de apagar el LED
parpadeo_intervalo = 500 # Intervalo entre parpadeos en milisegundos
# Función que se llama cuando el botón es presionado
def manejar_boto(pin):
global estat_led, temps_inici_encens
if not estat_led: # Si el LED está apagado, enciéndelo
estat_led = True
temps_inici_encens = time.ticks_ms() # Guarda el tiempo de inicio
led.value(1) # Enciende el LED
else:
estat_led = False
led.value(0) # Apaga el LED
# Configura la interrupción del botón
boto.irq(trigger=Pin.IRQ_RISING, handler=manejar_boto)
# Configura un temporizador para manejar el tiempo del LED encendido
temporizador = Timer(-1)
def manejar_temporizador(t):
global estat_led, parpadeos_restantes
if estat_led:
temps_actual = time.ticks_ms()
if time.ticks_diff(temps_actual, temps_inici_encens) > temps_encens:
if parpadeos_restantes > 0:
led.value(not led.value()) # Alterna el estado del LED (enciende/apaga)
parpadeos_restantes -= 1
else:
estat_led = False
led.value(0) # Asegúrate de que el LED esté apagado
entrar_en_deep_sleep()
# Inicia el temporizador para que se ejecute cada 500 ms (intervalo de parpadeo)
temporizador.init(period=parpadeo_intervalo, mode=Timer.PERIODIC, callback=manejar_temporizador)
def entrar_en_deep_sleep():
print("Entrando en deep sleep...")
time.sleep(0.1) # Pequeño retraso para asegurar que el mensaje se imprima
# Configura el pin del botón como el trigger para despertar
boto_wake = Pin(15, mode=Pin.IN, pull=Pin.PULL_DOWN)
# Configura la condición de wake-up para el botón
import esp32
esp32.wake_on_ext0(pin=boto_wake, level=esp32.WAKEUP_ANY_HIGH)
# Entra en deep sleep indefinidamente hasta que se despierte por el botón
deepsleep()
# Bucle principal vacío
while True:
pass