from machine import Pin, PWM, SoftI2C
from i2c_lcd import I2cLcd
from utime import sleep
# Налаштування I2C та LCD дисплея
i2c = SoftI2C(sda=Pin(14), scl=Pin(12))
lcd = I2cLcd(i2c, 0x27, 2, 16)
# Налаштування базера (PWM)
buzzer = PWM(Pin(15))
buzzer.duty(0)
# Список нот: (Назва, Пін кнопки, Частота в Гц)
NOTES_CONFIG = [
("DO", 26, 261),
("RE", 27, 294),
("MI", 13, 329),
("FA", 23, 349),
("SOL", 19, 392),
("LA", 18, 440),
("SI", 5, 494)
]
# Ініціалізація кнопок у словник
buttons = {}
for name, pin_num, freq in NOTES_CONFIG:
buttons[name] = {
"pin": Pin(pin_num, Pin.IN, Pin.PULL_UP),
"freq": freq
}
def show_message(text):
lcd.clear()
lcd.putstr(text)
show_message("Natysnit knopku")
while True:
button_pressed = False
for name, config in buttons.items():
if config["pin"].value() == 0:
show_message(f"Nota: {name}")
buzzer.freq(config["freq"])
buzzer.duty(512) # Вмикаємо звук
sleep(0.3) # Тривалість звучання
buzzer.duty(0) # Вимикаємо звук
show_message("Natysnit knopku")
button_pressed = True
break # Виходимо з циклу опитування, якщо кнопка знайдена
if not button_pressed:
sleep(0.05) # Невелика затримка для стабільності