import machine
import neopixel
import time
# Configuración para la matriz Neopixel 8x8
PIN = 2 # Pin donde está conectado el Neopixel
MATRIX_WIDTH = 8
MATRIX_HEIGHT = 8
NUM_PIXELS = MATRIX_WIDTH * MATRIX_HEIGHT
# Inicializa la matriz Neopixel
np = neopixel.NeoPixel(machine.Pin(PIN), NUM_PIXELS)
# Configuración de botones
button_1 = machine.Pin(18, machine.Pin.IN, machine.Pin.PULL_UP)
button_2 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
button_3 = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP)
button_4 = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_UP)
# Estado del botón 1
button_1_state = 0 # 0 = apagado (negro), 1 = operable (púrpura)
# Función para apagar la matriz (negro)
def clear_matrix():
for i in range(NUM_PIXELS):
np[i] = (0, 0, 0)
np.write()
# Función para llenar la matriz de un color
def fill_matrix(color):
for i in range(NUM_PIXELS):
np[i] = color
np.write()
# Función para alternar entre negro (apagado) y púrpura (operable) con el botón 1
def handle_button_1():
global button_1_state
if button_1_state == 0:
fill_matrix((0, 0, 0)) # Negro (apagado)
button_1_state = 1
else:
fill_matrix((128, 0, 128)) # Púrpura (operable)
button_1_state = 0
# Función para mostrar una flecha hacia arriba en la matriz (rojo)
def arrow_up():
clear_matrix()
# Coordenadas de la flecha hacia arriba (rojo)
arrow_up_coords = [
4, # Pico de la flecha
11, # Pico de la flecha
12, # Pico de la flecha
13, # Pico de la flecha
20, # Cuerpo de la flecha
28 # Cuerpo de la flecha
]
for i in arrow_up_coords:
np[i] = (255, 0, 0) # Color rojo
np.write()
# Función para mostrar una flecha hacia abajo en la matriz (verde)
def arrow_down():
clear_matrix()
# Coordenadas de la flecha hacia abajo (verde)
arrow_down_coords = [
36, # Pico de la flecha
27, # Pico de la flecha
20, # Cuerpo de la flecha
12 # Cuerpo de la flecha
]
for i in arrow_down_coords:
np[i] = (0, 255, 0) # Color verde
np.write()
# Función para manejar el botón 2 (flecha hacia arriba)
def handle_button_2():
arrow_up()
time.sleep(8) # Espera 8 segundos
clear_matrix()
# Función para manejar el botón 3 (flecha hacia abajo)
def handle_button_3():
arrow_down()
time.sleep(8) # Espera 8 segundos
clear_matrix()
# Función para manejar el botón 4 (sin obstáculos)
def handle_button_4():
fill_matrix((255, 255, 0)) # Amarillo (sin obstáculos)
time.sleep(1)
clear_matrix()
# Bucle principal
while True:
if not button_1.value(): # Si se presiona el botón 1
handle_button_1()
time.sleep(0.3) # Anti-rebote
if not button_2.value(): # Si se presiona el botón 2
handle_button_2()
time.sleep(0.3) # Anti-rebote
if not button_3.value(): # Si se presiona el botón 3
handle_button_3()
time.sleep(0.3) # Anti-rebote
if not button_4.value(): # Si se presiona el botón 4
handle_button_4()
time.sleep(0.3) # Anti-rebote
time.sleep(0.1)