from machine import Pin, PWM
import time
buzzer = PWM(Pin(13))
buzzer.duty_u16(0)
# Частоти звучання нот в герцах
CL = [0, 131, 147, 165, 175, 196, 211, 248] # Мала октава
CM = [0, 262, 294, 330, 350, 393, 441, 495] # 1 октава
CH = [0, 525, 589, 661, 700, 786, 882, 990] # 2 октава
# Звукові ноти (30 шт)
song = [
CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1],
CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]
]
# Звукові біти (тривалість, 30 шт)
beat = [
1, 1, 2, 2, 1, 1, 2, 2,
1, 1, 2, 2, 1, 1, 3, 1,
1, 2, 2, 1, 1, 2, 2, 1,
1, 2, 2, 1, 1, 3
]
print('ПІСЕНЬКА ...')
for i in range(len(song)):
# Задає частоту поточної ноти
buzzer.freq(song[i])
# Вмикає звук: встановлює шпаруватість 50%
# В MicroPython максимум це 65535, тому 50% це +- 32768
# аналог Buzz.start(50) з методички
buzzer.duty_u16(32768)
# Чекає програш біту ноти
time.sleep(beat[i] * 0.5)
# Коротка мікропауза, щоб ноти не зливалися в кашу
buzzer.duty_u16(0)
time.sleep(0.05)
print('\n\nКІНЕЦЬ !!!')
# Примусово вимикає зумер (аналог Buzz.stop())
buzzer.duty_u16(0)