from machine import Pin, Timer
from neopixel import NeoPixel
import time
NUM_LEDS = 64
pixels = NeoPixel(Pin(2), NUM_LEDS)
class colores:
def __init__(self):
self.NEGRO = (0, 0, 0)
self.ROJO = (155, 0, 0)
self.VERDE = (0, 255, 0)
self.AZUL = (0, 0, 64)
self.CIAN = (0, 64, 64)
self.PURPURA = (64, 0, 64)
self.BLANCO = (64, 64, 64)
self.AMARILLO = (255, 255, 10)
def obtener_color(self, nombre_color):
return getattr(self, nombre_color.upper(), None)
# Variables globales para el parpadeo del LED 5 en diferentes estados
timer_parpadeo = Timer(-1)
estado_parpadeo = False # Estado del LED de parpadeo
# Definición de los estados
estado_emergencia = False
estado_espera = False
estado_normal = True
# Función para cambiar los estados del LED de parpadeo
def cambiar_estado(nuevo_estado):
global estado_emergencia, estado_espera, estado_normal
estado_emergencia = nuevo_estado == 'emergencia'
estado_espera = nuevo_estado == 'espera'
estado_normal = nuevo_estado == 'normal'
# Función para parpadear el LED 5 según el estado actual
def parpadeo_led_estado():
global estado_parpadeo
color_instance = colores()
if estado_emergencia:
color = color_instance.ROJO
Ton, Toff = 5000, 5000 # Parpadeo rápido
elif estado_espera:
color = color_instance.AMARILLO
Ton, Toff = 5000, 5000 # Parpadeo lento
elif estado_normal:
color = color_instance.VERDE
Ton, Toff = 2500, 1000 # Parpadeo lento
def encender(timer):
global estado_parpadeo
if estado_parpadeo:
pixels[5] = color
else:
pixels[5] = color_instance.NEGRO
pixels.write()
estado_parpadeo = not estado_parpadeo
timer.init(period=Ton if estado_parpadeo else Toff, mode=Timer.ONE_SHOT, callback=encender)
encender(timer_parpadeo)
# Función para encender/apagar un LED con los botones
def toggleLed(led, nombre_color):
color_instance = colores()
color = color_instance.obtener_color(nombre_color)
if pixels[led] == color_instance.NEGRO:
pixels[led] = color
else:
pixels[led] = color_instance.NEGRO
pixels.write()
# Configuración de botones
boton1 = Pin(25, Pin.IN, Pin.PULL_DOWN)
boton2 = Pin(26, Pin.IN, Pin.PULL_DOWN)
boton3 = Pin(27, Pin.IN, Pin.PULL_DOWN)
boton4 = Pin(14, Pin.IN, Pin.PULL_DOWN)
# Mapeo de botones a LEDs y colores
botones_a_leds = {
boton1: (6, 'NEGRO'),
boton2: (6, 'PURPURA'),
boton3: (6, 'VERDE'),
boton4: (6, 'ROJO')
}
# Encender el LED vinculado al botón 1 (LED 6) en color púrpura al iniciar
pixels[6] = colores().PURPURA
pixels.write()
# Función para leer el estado de los botones y encender el LED correspondiente
def leer_botones():
global estado_emergencia, estado_espera, estado_normal
if boton1.value() == 1: # Botón 1 activa el estado de emergencia
cambiar_estado('emergencia')
time.sleep(0.2)
elif boton2.value() == 1: # Botón 2 activa el estado de espera
cambiar_estado('espera')
time.sleep(0.2)
elif boton3.value() == 1: # Botón 3 activa el estado normal
cambiar_estado('normal')
time.sleep(0.2)
elif boton4.value() == 1: # Botón 3 activa el estado normal
cambiar_estado('normal')
time.sleep(0.2)
for boton, (led, color) in botones_a_leds.items():
if boton.value() == 1: # Si el botón está presionado
toggleLed(led, color) # Cambia el estado del LED
time.sleep(0.2) # Pequeño retardo para evitar múltiples activaciones
# Iniciar el parpadeo continuo del LED 5
parpadeo_led_estado()
# Bucle principal para leer botones continuamente
while True:
leer_botones()
parpadeo_led_estado() # Actualizar parpadeo según el estado actual
time.sleep(0.1)