Étape 6: Temps pour l’exécuter!!!
Vidéo
http://youtu.be/lV9WurONtV0
Comme Résumé
Le programme aura 3 parties principales :
-La première partie se compose de la déclaration de variables, les constantes et les importations d’autres fichiers. Il importe le fichier « pitches.h », vous y trouverez la constante des notes avec leurs fréquences. Vous pouvez le télécharger depuis la page de l’arduino : http://arduino.cc/en/Tutorial/Tone3
-La deuxième partie est le setup() qui est fondamentalement l’initialisation du programme. Ici nous allons définir les broches d’entrée/sortie et autres choses. La partie du programme d’installation s’exécute uniquement une fois, au début du programme.
-La troisième partie is la loop(). Cela sera toujours jusqu'à ce que vous éteignez l’arduino. Vous y trouverez le code du programme principal qui joue la chanson et allume la led de différentes couleurs. Aussi, il sent la valeur du potentiomètre pour définir la vitesse (tempo) qui il jouera.
Tout le code complet :
/ * Mélodie
Joue une mélodie
circuit :
* 8 ohms haut-parleur sur la broche numérique 8
Baser sur l’exemple de http://arduino.cc/en/Tutorial/Tone de Tom Igoe
Modifié par : Irene Meiying Cheung Ruiz
*/
#include « pitches.h »
#define SONG1_SIZE 24
#define SONG2_SIZE 14
Notes de la mélodie 1 :
int melody1 [] = {}
NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_D3,
NOTE_D3, NOTE_D3, NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_E3, 0,
NOTE_E3, NOTE_C4, NOTE_B3, NOTE_A3, NOTE_FS3, 0,
NOTE_D4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_B3
};
Notes de la mélodie 2 :
int melody2 [] = {}
NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_F3,
NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_F4
};
Notez les durées de mélodie 1:4 = noire, 8 = croche, etc.. :
int noteDurations1 [] = {}
4, 4, 4, 4, 2.5,
8, 8, 4, 4, 4, 4, 2,5, 2,
4, 4, 4, 4, 2,5, 2,
4, 4, 4, 4, 1} ;
Notez les durées de mélodie 2:4 = noire, 8 = croche, etc.. :
int noteDurations2 [] = {}
2, 2.5, 8, 1.5, 4, 2, 2, 1.5,
4, 1.8, 4, 1.8, 4, 1} ;
Broches
int redPin = 11 ;
int greenPin = 10 ;
bluePin int = 9 ;
bouton int = 2 ;
variables de contrôle
int compteur = 0 ;
pressé d’int = 0 ;
comptine booléen = false ;
//Song variables temp
int songSizeS ;
int * noteDurationS = 0 ;
int * melodyS = 0 ;
variables de contrôle de vitesse
int sensorValue = 0 ;
tempo de flotteur = 0 ;
initialisation
void setup() {
goupilles de réglage
pinMode (redPin, sortie) ;
pinMode (greenPin, sortie) ;
pinMode (bluePin, sortie) ;
pinMode (bouton, entrée) ;
lumière jusqu'à vert au début
mapColor(-1) ;
fins de débogage
Serial.Begin (9600) ; en option
}
programme principal
void loop() {
détecter quand le bouton est enfoncé
if(digitalRead(button) == faible)
{
pressé = 1 ;
}
détecter le moment où le bouton a paraitre
if(digitalRead(button) == HIGH & & pressé == 1)
{
compteur ++ ;
pressé = 0 ;
comptine = true ; variable de contrôle quand commencer la chanson
décider quelle chanson joue
si (compteur % 2 == 0)
{
songSizeS = SONG1_SIZE ;
noteDurationS = noteDurations1 ;
melodyS = melody1 ;
}
d’autre
{
songSizeS = SONG2_SIZE ;
noteDurationS = noteDurations2 ;
melodyS = melody2 ;
}
}
Démarrer la chanson Si la touche a été enfoncée :
if(playsong)
{
comptine de = false ;
/ / itérer sur les notes de la mélodie
pour (int thisNote = 0; thisNote < songSizeS ; thisNote ++)
{
//sensor valeur du potentiomètre mappé sur la plage de valeurs de vitesse de 1-3
sensorValue = analogRead(A0) ;
tempo = sensorValue * (3.0 / 1023.0) ; Serial.println(tempo) ;
pour calculer la durée de la note, prendre une seconde
divisé par le type de note.
par exemple la note noire = 1000 / 4, note croche = 1000/8, etc. int noteDuration = 1000/noteDurationS [thisNote] ;
ton (8, melodyS[thisNote],noteDuration) ;
allume le rgb-led en fonction de la note
couleursde (melodyS [thisNote]) ;
pour distinguer les notes, fixer une durée minimale entre eux.
durée de la note * tempo
int pauseBetweenNotes = noteDuration * tempo ;
Delay(pauseBetweenNotes) ;
arrêter la lecture de ton :
noTone(8) ;
l’État a conduit à l’initiale (couleur verte) s’allume
mapColor(-1) ;
}
}
}
fonction qui mappe la note à une certaine couleur
Il combine la couleur de RVB pour produire un autre
couleursde void (int note)
{
Switch(note)
{
affaire NOTE_C3 :
affaire NOTE_C4 :
analogWrite (redPin, 0) ;
analogWrite (greenPin, 255) ;
analogWrite (bluePin, 255) ;
rupture ;
affaire NOTE_D3 :
affaire NOTE_D4 :
analogWrite (redPin, 0) ;
analogWrite (greenPin, 0) ;
analogWrite (bluePin, 255) ;
rupture ;
affaire NOTE_E3 :
affaire NOTE_E4 :
analogWrite (redPin, 255) ;
analogWrite (greenPin, 0) ;
analogWrite (bluePin, 0) ;
rupture ;
affaire NOTE_F3 :
affaire NOTE_F4 :
analogWrite (redPin, 0) ;
analogWrite (greenPin, 255) ;
analogWrite (bluePin, 0) ;
rupture ;
affaire NOTE_G3 :
affaire NOTE_G4 :
analogWrite (redPin, 255) ;
analogWrite (greenPin, 0) ;
analogWrite (bluePin, 255) ;
rupture ;
affaire NOTE_A3 :
affaire NOTE_A4 :
analogWrite (redPin, 255) ;
analogWrite (greenPin, 255) ;
analogWrite (bluePin, 0) ;
rupture ;
affaire NOTE_B3 :
affaire NOTE_B4 :
analogWrite (redPin, 0) ;
analogWrite (greenPin, 0) ;
analogWrite (bluePin, 0) ;
rupture ;
case 0: / / il représente l’état final ou du silence
analogWrite (redPin, 255) ;
analogWrite (greenPin, 255) ;
analogWrite (bluePin, 255) ;
rupture ;
cas -1 :/ / il représente état initial
analogWrite (redPin, 255) ;
analogWrite (greenPin, 0) ;
analogWrite (bluePin, 255) ;
rupture ;
par défaut ://other notes
analogWrite (redPin, 105) ;
analogWrite (greenPin, 255) ;
analogWrite (bluePin, 100) ;
rupture ;
}
}