# Importación de las bibliotecas necesarias
from machine import Pin, PWM  # Pin para controlar los pines GPIO y PWM para controlar el buzzer
from utime import sleep, sleep_ms  # Funciones de tiempo (no se usan en este código, pero pueden ser útiles)

# Configuración del buzzer en el pin 15 usando PWM
sound = PWM(Pin(15))

# Configuración de los botones en modo entrada con resistencia pull-up
# Cada botón está asociado con una nota musical específica
do = Pin(2, Pin.IN, Pin.PULL_UP)   # Botón para la nota Do
re = Pin(4, Pin.IN, Pin.PULL_UP)   # Botón para la nota Re
mi = Pin(16, Pin.IN, Pin.PULL_UP)  # Botón para la nota Mi
fa = Pin(17, Pin.IN, Pin.PULL_UP)  # Botón para la nota Fa
sol = Pin(5, Pin.IN, Pin.PULL_UP)  # Botón para la nota Sol
la = Pin(18, Pin.IN, Pin.PULL_UP)  # Botón para la nota La
si = Pin(19, Pin.IN, Pin.PULL_UP)  # Botón para la nota Si
DO = Pin(21, Pin.IN, Pin.PULL_UP)  # Botón para la nota Do (octava superior)

# Frecuencias de las notas musicales en Hertz (Hz) correspondientes a la escala Do, Re, Mi, etc.
notas = [261, 293, 329, 349, 392, 440, 493, 523]  # Notas de la escala (Do, Re, Mi, Fa, Sol, La, Si, Do)

# Bucle infinito para detectar la interacción con los botones y generar sonidos
while True:
    print(re.value())
    # Si el botón "Do" (botón conectado al pin 2) está presionado
    if do.value() == 0:
        sound.freq(261)  # Ajusta la frecuencia del buzzer a 261 Hz (nota Do)
        sound.duty(1023)  # Ajusta el ciclo de trabajo del PWM al máximo para generar sonido

    # Si el botón "Re" (botón conectado al pin 4) está presionado
    elif re.value() == 0:
        sound.freq(293)  # Ajusta la frecuencia del buzzer a 293 Hz (nota Re)
        sound.duty(1023)  # Genera sonido

    # Si el botón "Mi" (botón conectado al pin 16) está presionado
    elif mi.value() == 0:
        sound.freq(329)  # Ajusta la frecuencia a 329 Hz (nota Mi)
        sound.duty(1023)  # Genera sonido

    # Si el botón "Fa" (botón conectado al pin 17) está presionado
    elif fa.value() == 0:
        sound.freq(349)  # Ajusta la frecuencia a 349 Hz (nota Fa)
        sound.duty(1023)  # Genera sonido

    # Si no se presiona ningún botón
    else:
        sound.freq(1)  # Ajusta la frecuencia a 1 Hz, lo que es esencialmente silencio
        sound.duty(0)  # Apaga el buzzer configurando el ciclo de trabajo a 0 (sin sonido)

# El código sigue verificando continuamente si un botón está presionado
# y reproduce la nota musical correspondiente en el buzzer.