Maintenant le plus intéressant : le code pour faire fonctionner tout ça.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
BuzzerPin = 10 # pin10
SPEED = 1
# Les notes de musique (en fait ce sont des fréquences)
TONES = {
"do1":131,
"re1":147,
"mi1":165,
"fa1":175,
"sol1":196,
"la1":221,
"si1":248,
"do2":262,
"re2":294,
"mi2":330,
"fa2":350,
"sol2":393,
"la2":441,
"si2":495,
"do3":525,
"re3":589,
"mi3":661,
"fa3":700,
"sol3":786,
"la3":882,
"si3":990,
"c6":1047,
"b5":988,
"a5":880,
"g5":784,
"f5":698,
"e5":659,
"eb5":622,
"d5":587,
"c5":523,
"b4":494,
"a4":440,
"ab4":415,
"g4":392,
"f4":349,
"e4":330,
"d4":294,
"c4":262}
# La chanson
SONG = [
["re3",16],["re3",16],["mi3",16],["mi3",16],
["si2",16],["si2",16],["re3",8],
["re3",16],["re3",16],["mi3",16],["mi3",16],
["si2",16],["si2",16],["re3",8],
["re3",16],["re3",16],["mi3",16],["mi3",16],
["sol3",16],["sol3",16],["fa3",8],["fa3",8],
["mi3",8],["re3",8],["do3",8]
]
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(BuzzerPin, GPIO.OUT)
def playTone(p,tone):
# Calcul de la durée de la note
duration = (1./(tone[1]*0.25*SPEED))
if tone[0] == "p": # p => pause
time.sleep(duration)
else: #
frequency = TONES[tone[0]]
p.ChangeFrequency(frequency)
p.start(0.5)
time.sleep(duration)
p.stop()
def run():
p = GPIO.PWM(BuzzerPin, 440)
p.start(0.5)
for t in SONG:
playTone(p,t)
def destroy():
GPIO.output(BuzzerPin, GPIO.HIGH)
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
run()
GPIO.cleanup()
except KeyboardInterrupt:
destroy()
Bonjour et merci pour cette aide sur les buzzers et le raspberry
Pour la chanson, elle est certes reconnaissable mais les fausses notes n’aident pas à découvrir cette hymne aux pattes palmées.
Il manque dans la liste des notes les dièses et les bémoles (les fréquences sont ici: http://jeanjacques.dialo.free.fr/Anglais/afrequenc.htm)
et en remplaçant le FA par un FA#, on trouverait plus facilement.
En tout cas, merci pour cet article.
🙂 Bien vu. Je savais pour les Fa# mais la flemme de chercher les fréquences. Merci pour le lien en tout cas. Je le mets bien au chaud, ça pourra servir. Bonne journée