Une class pour Buzzer

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
hubo29
Messages : 8
Enregistré le : sam. 27 févr. 2016 19:09

Une class pour Buzzer

Message par hubo29 » dim. 6 mars 2016 13:16

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

domi
Administrateur
Messages : 3233
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Une class pour Buzzer

Message par domi » dim. 6 mars 2016 16:31

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.
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.

hubo29
Messages : 8
Enregistré le : sam. 27 févr. 2016 19:09

Re: Une class pour Buzzer

Message par hubo29 » dim. 6 mars 2016 19:19

Voici

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))
Test

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()

Répondre

Retourner vers « Python »