import machine
import neopixel
import time
# Налаштування GPIO відповідно до вашої схеми diagram.json
LED_PIN = 22 # Пін для NeoPixel
BUZZER_PIN = 14 # Пін для Buzzer
NUM_LEDS = 16 # Кількість світлодіодів кільця
# Ініціалізація периферії
np = neopixel.NeoPixel(machine.Pin(LED_PIN), NUM_LEDS)
# Створюємо ШІМ із базовою частотою на старті
buzzer = machine.PWM(machine.Pin(BUZZER_PIN), freq=440, duty_u16=0)
# Частоти нот для мелодії Маріо
NOTE_E5 = 659
NOTE_C5 = 523
NOTE_G5 = 784
NOTE_G4 = 392
# Мелодія Маріо (Вступна тема)
melody = [
NOTE_E5, NOTE_E5, 0, NOTE_E5, 0, NOTE_C5, NOTE_E5, 0,
NOTE_G5, 0, 0, 0, NOTE_G4, 0, 0, 0
]
# Тривалість кожної ноти/паузи в мілісекундах
durations = [
105, 105, 105, 105, 105, 105, 105, 105,
105, 105, 105, 105, 105, 105, 105, 105
]
# Насичені, яскраві кольори для кожної ноти (максимум 255)
colors = [
(255, 0, 0), # Яскраво-червоний (E5)
(255, 0, 0), # Яскраво-червоний (E5)
(0, 0, 0), # Пауза (вимкнено)
(255, 0, 0), # Яскраво-червоний (E5)
(0, 0, 0), # Пауза (вимкнено)
(0, 255, 255), # Насичений бірюзовий (C5)
(255, 0, 0), # Яскраво-червоний (E5)
(0, 0, 0), # Пауза (вимкнено)
(0, 255, 0), # Яскраво-зелений (G5)
(0, 0, 0), # Пауза (вимкнено)
(0, 0, 0), # Пауза (вимкнено)
(0, 0, 0), # Пауза (вимкнено)
(0, 0, 255), # Глибокий синій (G4)
(0, 0, 0), # Пауза (вимкнено)
(0, 0, 0), # Пауза (вимкнено)
(0, 0, 0) # Пауза (вимкнено)
]
def play_note(freq, duration, color):
# Покрокове заповнення світлодіодів
for i in range(NUM_LEDS):
np[i] = color
np.write()
time.sleep_ms(1)
if freq > 0:
buzzer.freq(freq)
buzzer.duty_u16(32768)
else:
buzzer.duty_u16(0)
# Розраховуємо залишок часу звучання ноти
actual_delay = duration - NUM_LEDS
if actual_delay > 0:
time.sleep_ms(actual_delay)
# Вимикаємо звук після завершення такту
buzzer.duty_u16(0)
# Коротка між нотна пауза
time.sleep_ms(25)
# Нескінченний цикл відтворення
while True:
for i in range(len(melody)):
play_note(melody[i], durations[i], colors[i])
np.fill((0, 0, 0))
np.write()
time.sleep(1.5) # Пауза між повтореннями мелодії