import machine
import neopixel
import time
# Configuración de los pines y número de LEDs
pin = machine.Pin(21) # Pin de datos conectado a la tira WS2812
num_leds = 64 # Matriz 8x8, 64 LEDs en total
# Inicialización de la tira de LEDs
np = neopixel.NeoPixel(pin, num_leds)
# Definición de colores
ROJO = (255, 0, 0)
NEGRO = (0, 0, 0)
AZUL = (0, 0, 255)
VERDE = (0, 255, 0)
# Configuración de los pines de los botones
boton_1 = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP) # Botón conectado al pin 14
boton_2 = machine.Pin(27, machine.Pin.IN, machine.Pin.PULL_UP) # Botón conectado al pin 27
# Variables globales para el fondo y el parpadeo
fondo_color = VERDE
led_pos = 0 # Posición del LED parpadeante
Ton = 0 # Tiempo encendido
Toff = 0 # Tiempo apagado
parpadeando = False
led_state = False
last_time = 0
# Función para sincronizar el cambio de fondo y el parpadeo
def actualizar_leds():
global led_state, last_time, parpadeando
current_time = time.ticks_ms()
# Sincronizar el parpadeo del LED
if parpadeando:
# Parpadeo del LED en la posición `led_pos`
if led_state:
if time.ticks_diff(current_time, last_time) >= Ton:
led_state = False
last_time = current_time
else:
if time.ticks_diff(current_time, last_time) >= Toff:
led_state = True
last_time = current_time
# Actualizar todos los LEDs, sincronizando el fondo y el parpadeo
for i in range(num_leds):
if i == led_pos:
if led_state:
np[i] = ROJO # LED parpadeante encendido
else:
np[i] = NEGRO # LED parpadeante apagado
else:
# Color de fondo actual (AZUL o VERDE)
np[i] = fondo_color
np.write()
# Función para cambiar el color de fondo a AZUL (excepto el LED parpadeante)
def cambiar_fondo_azul(pin):
global fondo_color
fondo_color = AZUL
actualizar_leds() # Actualizar inmediatamente el fondo cuando se presiona el botón
# Función para cambiar el color de fondo a VERDE (excepto el LED parpadeante)
def cambiar_fondo_verde(pin):
global fondo_color
fondo_color = VERDE
actualizar_leds() # Actualizar inmediatamente el fondo cuando se presiona el botón
# Configuración de las interrupciones para los botones
boton_1.irq(trigger=machine.Pin.IRQ_FALLING, handler=cambiar_fondo_azul)
boton_2.irq(trigger=machine.Pin.IRQ_FALLING, handler=cambiar_fondo_verde)
# Función para iniciar el parpadeo
def parpadeoLed(posicion, ton, toff):
global Ton, Toff, led_pos, parpadeando, last_time
led_pos = posicion
Ton = ton
Toff = toff
parpadeando = True
last_time = time.ticks_ms()
# Inicializa el parpadeo en un LED específico
parpadeoLed(45, 800, 200)
# Bucle principal
while True:
# Actualizar el fondo y el parpadeo en cada ciclo
actualizar_leds()