Etape 3: Télécharger le code et jouer de la musique vibration !
Merci à club de robotique R-Team pour l’affichage de leur code arduino avec les mélodies programmés dans !
http://www.Phys-x.org/rbots/index.php?option=com_content&view=article&id=66:Lesson-5-Play-Melody-with-piezo&catid=41:kits&Itemid=70
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * Jouer la mélodie
* -----------
*
* Programme pour jouer une mélodie simple
*
* Tons sont créés par impulsions rapidement un orateur sur et en dehors
* à l’aide de PWM, à créer des fréquences de signature.
*
* Chaque note a une fréquence, créée en faisant varier la durée de
* vibration, mesuré en microsecondes. Nous allons utiliser la largeur d’impulsion
* modulation (PWM) pour créer cette vibration.
* On calcule la largeur d’impulsion pour être la moitié de la période ; Nous avons d’impulsion
* le haut-parleur haute pour microsecondes « largeur d’impulsion », puis faible
pour les microsecondes « largeur d’impulsion ».
* Cette impulsion crée une vibration de la fréquence désirée.
*
* (fente) 2005 D. Cuartielles pour K3
* La refactorisation et commente 2006 clay.shirky
* Voir les NOTES dans les commentaires à la fin pour les améliorations possibles
*/
// TONES ==========================================
Commencez par définir la relation entre
Remarque, période et fréquence.
période est en microseconde alors P = 1/f * (1E6)
#define c3 7634
#define d3 6803
#define e3 6061
#define f3 5714
g3 #define 5102
#define a3 4545
#define b3 4049
#define c4 3816 / / 261 Hz
#define d4 3401 / / 294 Hz
#define e4 3030 / / 329 Hz
#define f4 2865 / / 349 Hz
#define g4 2551 / / 392 Hz
#define a4 2272 / / 440 Hz
#define a4s 2146
#define b4 2028 / / 493 Hz
#define c5 1912 / / 523 Hz
#define d5 1706
#define d5s 1608
#define e5 1517
#define f5 1433
#define g5 1276
#define a5 1136
#define a5s 1073
#define b5 1012
#define c6 955
Définir une note spéciale, « R », pour représenter un repos
#define R 0
// SETUP ============================================
Mettre en place des haut-parleurs sur une goupille PWM (digital 9, 10 ou 11)
int speakerOut = 9 ;
Voulons-nous débogage sur hors série ? 1 pour Oui, 0 pour non
int DEBUG = 1 ;
void setup() {}
pinMode (speakerOut, sortie) ;
Si {(DEBUG)
Serial.Begin(9600) ; Jeu serial dehors, si nous voulons que le débogage
}
}
MÉLODIE et TIMING ===
mélodie [] est un tableau de notes, accompagnée de battements [],
qui définit la longueur relative de chaque note (# supérieur, note plus longue)
thème de star wars
la mélodie d’int [] = {f4 f4, f4, a4s, f5, d5s, d5, c5, a5s, f5, d5s, d5, c5, a5s, f5, d5s, d5, d5s, c5};//
int bat [] = {21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21, 21, 128} ;
débogage de note
la mélodie d’int [] = {c4, d4, e4, f4, g4, a4, b4, c5} ;
int bat [] = {63, 64, 64, 64, 64, 64, 64, 64} ;
Super thème de mario
la mélodie d’int [] = {e5, e5, R, e5, R, c5, e5, R, g5, g4, R, R, R R, R, R, c5, R, R, g4, R, R, e4} ;
int bat [] = {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, 16, 8, 16, 16} ;
int elements_valides = sizeof(melody) / 2 ; Longueur de la mélodie, pour une boucle.
Set global tempo
rythme long = 10000 ;
Régler la durée de pause entre les notes
int pause = 1000 ;
Variable de boucle pour augmenter la longueur de repos
int rest_count = 50 ; <-BLETCHEROUS HACK ; Voir les NOTES
Initialiser des variables de base
toneM int = 0 ;
battre int = 0 ;
longue durée = 0 ;
// PLAY TONE ==============================================
L’orateur pour jouer une tonalité pour un particulier de la durée d’impulsion
void playTone() {}
long elapsed_time = 0 ;
Si (toneM > 0) {/ / si ce n’est pas un battement de repos, alors que le ton a
joué moins longtemps que « duration », enceinte de pulse haute et basse
tandis que (elapsed_time < durée) {}
digitalWrite(speakerOut,HIGH) ;
delayMicroseconds(toneM / 2) ;
VERS LE BAS
digitalWrite (speakerOut, basse) ;
delayMicroseconds(toneM / 2) ;
Garder une trace de combien de temps nous avons pulsé
elapsed_time += (toneM) ;
}
}
else {/ / repos battre ; retardent le temps de la boucle
pour (int j = 0; j < rest_count; j ++) {/ / Voir NOTE sur rest_count
delayMicroseconds(duration) ;
}
}
}
LET THE WILD RUMPUS COMMENCE ===
void loop() {}
Mettre en place un compteur pour tirer de la mélodie [] et [bat]
pour (int i = 0; i < elements_valides; i ++) {}
toneM = mélodie [i] ;
battre = beats [i] ;
durée = battement * tempo ; Mettre en place le calendrier
playTone() ;
Une pause entre les notes...
delayMicroseconds(pause) ;
Si (déboguer) {/ / si le débogage, rapport boucle, ton, rythme et la durée
Serial.Print(i) ;
Serial.Print(":") ;
Serial.Print(Beat) ;
Serial.Print("") ;
Serial.Print(toneM) ;
Serial.Print("") ;
Serial.println(Duration) ;
}
}
}
/*
* NOTES
* Le programme est censé tenir une tonalité pour microsecondes « duration ».
* Mensonges mensonges mensonges ! Il détient pour au moins microsecondes « duration », _plus_
* aucun frais généraux créé par incremeting elapsed_time (peut être à plus de
* 3 K microsecondes) _plus_ surcharge due à une boucle et deux digitalWrites()
*
* En conséquence, un ton de « duration » joue beaucoup plus lentement qu’un repos
* de « durée. » rest_count crée une variable de boucle pour amener les battements « repos »
* conformément aux battements de « ton » de la même longueur.
*
* rest_count sera affecté par l’architecture de circuit intégré et vitesse, ainsi que
* frais généraux à partir de n’importe quel mods de programme. Comportement passé y a aucune garantie d’avenir
* performance. Votre kilométrage peut varier. Fusible lumineux et vous échapper.
*
* Cela pourrait utiliser un certain nombre d’améliorations :
* Ajoutez le code à permettent au programmeur de spécifier combien de fois la mélodie devrait
* boucle avant de s’arrêter
Ajouter des autre octave
* DÉPLACER le tempo, pause et rest_count aux instructions #define
* Ré-écrire inclure le volume, à l’aide d’analogWrite, comme pour le programme de second
* http://www.arduino.cc/en/Tutorial/PlayMelody
Ajouter des code pour faire le tempo peut être définie par pot ou autre périphérique d’entrée
Ajouter des code pour tirer le tempo ou volume réglable de communication série
* (Nécessite 0005 ou supérieur.)
Ajouter des code pour créer un décalage de tonalité (supérieur ou inférieur) par le biais de pot etc.
* REMPLACER mélodie aléatoire avec l’ouverture des bars à « Smoke on the Water »
* /