from machine import Pin, PWM
import time
# Configuración de pines para los LEDs
led_pins = [4, 5, 18, 19, 21] # LEDs conectados a estos pines GPIO
leds = [Pin(pin, Pin.OUT) for pin in led_pins]
button = Pin(2, Pin.IN, Pin.PULL_DOWN) # Botón conectado a GPIO2
buzzer = PWM(Pin(22)) # Buzzer conectado a GPIO22
# Variables de control
sequence_index = 0
max_index = 4
scale = 1
button_pressed = False
# Función para actualizar LEDs según la secuencia
def update_leds(index):
for i, led in enumerate(leds):
led.value(1 if i == index else 0) # Enciende solo el LED correspondiente
# Función para manejar el sonido
def play_sound(scale):
buzzer.freq(440 * max(1, scale)) # Ajustar frecuencia, evita que scale sea menor a 1
buzzer.duty(512) # 50% de ciclo de trabajo para el sonido
# Función para detener el sonido
def stop_sound():
buzzer.duty(0)
# Bucle principal
while True:
if button.value() == 1 and not button_pressed:
button_pressed = True
play_sound(scale)
# Cambiar de índice en la secuencia y ajustar escala
if sequence_index >= max_index:
scale = min(scale + 1, 5) # Incremento de escala, limitándolo a un máximo de 5
sequence_index = 0 # Reinicia la secuencia al inicio
else:
sequence_index += 1 # Avanza en la secuencia
update_leds(sequence_index) # Actualizar LEDs
time.sleep(0.3) # Espera breve para debounce
elif button.value() == 0 and button_pressed:
button_pressed = False
stop_sound()
time.sleep(0.1) # Pequeño retardo para evitar rebotes del botón