”Jouer une mélodie avec des boutons-poussoir”

. Objectif
Dans cette activité, nous allons voir qu’il est possible de jouer une mélodie avec un Arduino et des boutons poussoir qui vont simuler les touches d’un piano :
– On dispose de 5 boutons poussoir que l’on associe chacun à une note de musique (une onde sonore de fréquence déterminée en Hz – voir tableau des fréquences des notes de musique) et à une durée d’émission.
– L’appui sur un bouton poussoir permet de jouer la note associée au bouton pendant la durée définie.
– L’exemple de mélodie proposé dans le code sera jouée en suivant la séquence ci-contre :

Le code pourra être modifié pour voir l’influence des variables (fréquence des notes associées aux boutons en Hz, durée de la note).
. Le programme
. Programme en Python (”Projet3/Activity4/PY/Activity4.py”)
Déroulement du programme :
– Importation des librairies et définition de fonctions :
. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’Arduino via le protocole ”Firmata Express”,
. Le module ”PymataExpressDef.Py” regroupant toutes les fonctions utiles à l’utilisation de ”Pymata-express” (fonction de déclaration des entrées et sorties, de lectures, d’écritures…) ,
. La bibliothèque ”time” pour la gestion des temps de pause.
– Déclaration des constantes et variables :
. PinTone = 3 (constante correspondant au n° de la broche sur laquelle le buzzer est connecté)
. PinButton = [12,11,10,9,8] (liste de constantes correspondant aux n° des broches des boutons-poussoir)
. Notes = [262,294,330,349,392] (liste des fréquences en Hz des notes associées aux boutons-poussoir)
. NoteDurations = [4,4,4,4,8] (liste des durées des notes en fraction de seconde)
. PlayNote = False (variable booléenne indiquant si une note doit être jouée)
. Note = 0 (variable correspondant au N° de la note à jouer)
. NoteDuration = 0 (variable pour stocker la durée de la note en ms)
. PortComArduino (port COM sur lequel l’Arduino est connecté)
– Connexion à l’Arduino :
. Détection du port COM, tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:
PortComArduino = SelectPortCOM()
board = OpenPortCom(PortComArduino)
. Si la connexion à l’Arduino est réussie :
– Déclaration de la broche du buzzer en mode ”Tone” :
Set_Tone_Pin(board, PinTone)
– déclaration des broches des boutons-poussoir en entrées digitales :
for i in range(5):
Set_DigitalInput_Pin(board, PinButton[i])
– Boucle principale du programme (boucle ”while True”) :

. Programme en langage Arduino (”Projet3/Activity4/INO/Activity4.ino”)




