Salut à tous,
Dans la continuité.. comment intégrer des composants facilement, ci joint une classe pour gerer vos buzzers
http://aubonsurf.free.fr/?p=294
Une class pour Buzzer
Modérateurs : Francois, Manfraid
-
- Administrateur
- Messages : 3233
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Une class pour Buzzer
Bonjour,
Pourquoi ne pas la poster ici ?
Ce sera plus simple pour en débattre, tout sera dans le sujet sans avoir recours à un lien externe.
Merci d'avance.
Pourquoi ne pas la poster ici ?
Ce sera plus simple pour en débattre, tout sera dans le sujet sans avoir recours à un lien externe.
Merci d'avance.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Re: Une class pour Buzzer
Voici
Test
Code : Tout sélectionner
########################################
# C L A S S : PASSIFBUZZER
#
# HUB.BOSSEUR@GMAIL.COM
# http://aubonsurf.free.fr
#######################################
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
# Declaration des E/S
# Usage : moBuzzer=PassifBuzzer(PinUtiliser, ModeDeNumerotation)
# exemple : moBuzzer=PassifBuzzer(4, BCM)
# monBuzzer.play(pitches, duration)
# Piches = tableau de fréquences
# duration = tableau de durees
# monBuzzer.clean()
class PassifBuzzer:
def __init__(self, pinBZ,typeBoard):
self.pin_BZ=pinBZ
print ("Declaration Buzzer sur PIN "+str(self.pin_BZ))
if typeBoard=='BCM':
GPIO.setmode(GPIO.BCM)
print ("BCM")
else:
GPIO.setmode(GPIO.BOARD)
print ("BOARD")
GPIO.setup(self.pin_BZ, GPIO.IN)
GPIO.setup(self.pin_BZ, GPIO.OUT)
print("buzzer ready")
#Fonction buzz avec une frequence et une duree)
def buzz(self,pitch, duration):
if(pitch==0):
time.sleep(duration)
return
period = 1.0 / pitch #periode=1/frequence
delay = period / 2
cycles = int(duration * pitch) #nombre de cycle pour la duree avec cette frequence)
for i in range(cycles): #jouer un cycle
GPIO.output(self.pin_BZ, True)
time.sleep(delay)
GPIO.output(self.pin_BZ, False)
time.sleep(delay)
def play(self, pitches, duration):
#GPIO.setmode(GPIO.BCM)
#GPIO.setup(self.buzzer_pin, GPIO.OUT)
x=0
for p in pitches:
print (p, duration[x])
self.buzz(p, duration[x]/100) #feed the pitch and duration to the function, “buzz”
time.sleep(duration[x]/200)
x+=1
def clean(self):
GPIO.cleanup()
print("close "+str(self.pin_BZ))
Code : Tout sélectionner
import passifBuzzer
import time
import os
#NOTES
c3=763
d3=680
e3=606
f3=571
g3=510
a3=454
b3=404
c4=381
d4=340
e4=303
f4=286
g4=255
a4=227
a4s=214
b4=202
c5=191
d5=170
d5s=160
e5=151
f5=143
g5=127
a5=113
a5s=107
b5=101
c6=95
R=0
PIN_PASSIDFBUZZ=17
starWarThemeNote=[ f4, f4, f4, a4s, f5, d5s, d5, c5, a5s, f5, d5s, d5, c5, a5s, f5, d5s, d5, d5s, c5]
starWarThemeTone=[ 21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21, 21, 128 ]
marcehImperialeNote=[a4, R, a4, R, a4, R, f4, R, c5, R, a4, R, f4, R, c5, R, a4, R, e5, R, e5, R, e5, R, f5, R, c5, R, g5, R, f5, R, c5, R, a4, R]
marcehImperialeTone=[50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 80, 50, 20, 50, 20, 50, 20, 40, 5, 20, 5, 60, 10, 40, 5, 20, 5, 60, 40]
if __name__ == '__main__':
buz=passifBuzzer.PassifBuzzer(PIN_PASSIDFBUZZ, 'BCM')
try:
buz.play(starWarThemeNote,starWarThemeTone)
buz.play(marcehImperialeNote,marcehImperialeTone)
except KeyboardInterrupt:
buz.clean()