from machine import Pin, PWM
from time import sleep_ms
from tones import tones
# 蜂鳴器接腳
buzzer = PWM(Pin(15))
# 命運交響曲主題旋律(小節長度節選版)
melody = [
# 開頭動機
('G4', 300), ('G4', 300), ('G4', 300), ('DS4', 900),
('F4', 300), ('F4', 300), ('F4', 300), ('D4', 900),
# 延伸旋律
('G4', 300), ('G4', 300), ('G4', 300), ('DS4', 900),
('F4', 300), ('F4', 300), ('F4', 300), ('D4', 900),
# 第二主題
('DS4', 300), ('DS4', 300), ('DS4', 300), ('DS4', 300),
('DS4', 300), ('D4', 300), ('C4', 300), ('AS3', 900),
# 再次重複主題
('G4', 300), ('G4', 300), ('G4', 300), ('DS4', 900),
('F4', 300), ('F4', 300), ('F4', 300), ('D4', 900),
]
def play_tone(frequency, duration):
buzzer.freq(frequency)
buzzer.duty_u16(30000)
sleep_ms(duration)
buzzer.duty_u16(0)
sleep_ms(50) # 音符間小停頓
def play_melody(melody):
for note, duration in melody:
freq = tones.get(note, 0)
if freq > 0:
play_tone(freq, duration)
else:
sleep_ms(duration)
play_melody(melody)
buzzer.deinit()