Étape 5 :
donc là u go, une façon agréable et facile à utiliser Arduino juste pour le plaisir, voici le code complet
// TONES ==========================================
Commencez par définir la relation entre
Remarque, période et fréquence.
#define 3830 / / 261 Hz
#define RE 3400 / / 294 Hz
#define MI 3038 / / 329 Hz
#define FA 2864 / / 349 Hz
#define SOL 2550 / / 392 Hz
#define LA 2272 / / 440 Hz
#define SI 2028 / / 493 Hz
#define DOM 1912 / / 523 Hz
Définir une note spéciale, « R », pour représenter un repos
#define reste 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 ;
int sensorPin = A0 ; Sélectionnez l’entrée pin pour le ldr
unsigned int sensorValue = 0 ; variable pour stocker la valeur provenant de la ldr
void setup() {}
pinMode (speakerOut, sortie) ;
pinMode (sortie 2) ;
pinMode (3, sortie) ;
pinMode (sortie 4) ;
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)
la mélodie d’int [] = {RE, MI, ré, SI, repos, RE, MI, RE, TR, repos, LA, LA, FA, repos, SOL, SOL, RE, reste} ;
int bat [] = {8, 8, 8, 16, 64, 8, 8, 8, 16, 64,8,8,16,32,8,8,16,128} ;
int elements_valides = sizeof(melody) / 2 ; Longueur de la mélodie, pour une boucle.
Set global tempo
rythme long = 80000 ;
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 = 100 ; <-BLETCHEROUS HACK ; Voir les NOTES
Initialiser des variables de base
int tone_ = 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 (tone_ > 0) {si (tone_ == 3400 || tone_ == 3038) {}
digitalWrite (2, haut) ;
digitalWrite (3, faible) ;
digitalWrite (4, faible) ;
}
ElseIf (tone_ == 2028 || tone_ == 2272) {}
digitalWrite (2, basse) ;
digitalWrite (3, élevée) ;
digitalWrite (4, faible) ; }
ElseIf (tone_ == 2864 || tone_ == 2550) {digitalWrite (2, basse) ;
digitalWrite (3, faible) ;
digitalWrite (4, élevée) ; } / / 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(tone_ / 2) ;
VERS LE BAS
digitalWrite (speakerOut, basse) ;
delayMicroseconds(tone_ / 2) ;
Garder une trace de combien de temps nous avons pulsé
elapsed_time += (tone_) ;
}
}
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]
lire la valeur de la ldr :
sensorValue = analogRead(sensorPin) ;
if(sensorValue<500) {}
//
//
pour (int i = 0; i < elements_valides; i ++) {}
tone_ = 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(tone_) ;
Serial.Print("") ;
Serial.println(Duration) ;
}
}} / / set la LED sur
else {}
digitalWrite (2, basse) ;
digitalWrite (3, faible) ;
digitalWrite (4, faible) ; } / / set la LED sur
}
la partie de débogage peut être utile à des fins éducatives, puisque vous pouvez voir les valeurs étant pris et quels tons sont joués par le dispositif