"""Scrivere un programma che riproduca su un buzzer piezo una sequenza
di note (data la frequenza di ciascuna nota) in maniera ciclica.
Alla pressione del bottone (BTN0) il programma dovrà consentire di variare
la velocità di riproduzione (da 1x a 2x e viceversa).
Per le note si utilizzino le seguenti frequenze:
-A4-400HZ
-C#5-550HZ
-E5-660HZ
-A5-880HZ
Il pattern da riprodurre sarà: A4, C#5, E5, A5, A5, E5, C#5, A4.
Impostare la durata di ciascun suono a 500 millisecondi per la velocità 1x."""
from machine import Pin, PWM
from time import sleep_ms
class BUZZER:
def __init__(self, sig_pin):
self.pwm = PWM(Pin(sig_pin, Pin.OUT))
def play(self, melodies, wait, duty):
for note in melodies:
if note == 0:
self.pwm.duty(0)
else:
self.pwm.freq(note)
self.pwm.duty(duty)
sleep_ms(wait)
self.pwm.duty(0)
#notes and its equivalent frequency
B0=31
C1=33
CS1=35
D1=37
DS1=39
E1=41
F1=44
FS1=46
G1=49
GS1=52
A1=55
AS1=58
B1=62
C2=65
CS2=78
E2=82
F2=87
FS2=93
G2=98
GS2=104
A2=110
AS2=117
B2=123
C3=131
CS3=139
D3=147
DS3=156
E3=165
F3=175
FS3=185
G3=196
GS3=208
A3=220
AS3=233
B3=247
C4=262
CS4=277
D4=294
DS4=311
E4=330
F4=349
FS4=370
G4=392
GS4=415
A4=440
AS4=466
B4=494
C5=523
CS5=554
D5=587
DS5=622
E5=659
F5=698
FS5=740
G5=784
GS5=831
A5=880
AS5=932
B5=988
C6=1047
CS6=1109
D6=1175
DS6=1245
E6=1319
F6=1397
FS6=1480
G6=1568
GS6=1661
A6=1760
AS6=1865
B6=1976
C7=2093
CS7=2217
D7=2349
DS7=2489
E7=2637
F7=2794
FS7=2960
G7=3136
GS7=3322
A7=3520
AS7=3729
B7=3951
C8=4186
CS8=4435
D8=4699
DS8=4978
# 0 denotes rest notes
mario = [
E7, E7, 0, E7, 0, C7, E7, 0,
G7, 0, 0, 0, G6, 0, 0, 0,
C7, 0, 0, G6, 0, 0, E6, 0,
0, A6, 0, B6, 0,AS6, A6, 0,
G6, E7, 0, G7, A7, 0, F7, G7,
0, E7, 0, C7, D7, B6, 0, 0,
C7, 0, 0, G6, 0, 0, E6, 0,
0, A6, 0, B6, 0,AS6, A6, 0,
G6, E7, 0, G7, A7, 0, F7, G7,
0, E7, 0, C7, D7, B6, 0, 0,
]
twinkle = [
C6, C6, G6, G6, A6, A6, G6, 0,
F6, F6, E6, E6, D6, D6, C6, 0,
G6, G6, F6, F6, E6, E6, D6, 0,
G6, G6, F6, F6, E6, E6, D6, 0,
F6, F6, E6, E6, D6, D6, C6, 0,
]
b= BUZZER(15)
b.play(mario,150,512)
sleep_ms(1000)
b.play(twinkle,600,512)
sleep_ms(1000)
#while True:
#frequency=s[p]
#buzzer.init(freq=frequency, duty=512)
#print("frequency is",frequency,"Hz")
#p=(p+1)%len(s)
#print("posizione",p,"Hz")
#buzzer.play(s,150,512)
#sleep(time)