from machine import Pin, PWM
import time
# Визначення частот нот
NOTE_C4 = 261
NOTE_D4 = 294
NOTE_E4 = 329
NOTE_F4 = 349
NOTE_G4 = 392
NOTE_A4 = 440
NOTE_B4 = 494
NOTE_C5 = 523
button_pins = [2, 4, 16, 17, 5, 18, 19, 21] # Піни кнопок
notes = [NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5] # Частоти нот
buzzer_pin = 15 # Пін зумера
# Налаштування пінів для кнопок
buttons = [Pin(pin, Pin.IN, Pin.PULL_UP) for pin in button_pins]
# Налаштування піна для зумера
buzzer = PWM(Pin(buzzer_pin))
def play_tone(note):
buzzer.freq(note) # Встановлюємо частоту
buzzer.duty_u16(32767) # Встановлюємо робочий цикл на 50%
def stop_tone():
buzzer.duty_u16(0) # Вимикаємо сигнал
# Простий фільтр дребезгу
def is_button_pressed(pin):
stable_state = pin.value()
time.sleep(0.01) # Невелика затримка для перевірки стану
return pin.value() == stable_state == 0
while True:
button_pressed = False
for i in range(len(buttons)):
if is_button_pressed(buttons[i]): # Перевіряємо, чи натиснута кнопка
play_tone(notes[i]) # Відтворюємо відповідну ноту
button_pressed = True
break # Перериваємо цикл, якщо кнопка натиснута
if not button_pressed: # Якщо жодна кнопка не натиснута, вимикаємо звук
stop_tone()
time.sleep(0.01) # Невелика затримка для уникнення дребезгу кнопок