Étape 3: Le Code
C’est le code pour télécharger sur l’Arduino pour exécuter ce circuit. Le buzzer piezo prend la plupart du code. Cette version joue Mr. Roboto, mais vous pouvez modifier le code pour faire jouer n’importe quelle chanson que vous voulez, juste s’assurer que les fréquences dans la première déclaration correspondent avec les notes que vous voulez jouer. Le fichier .ino est également joint si vous vous sentez paresseux. Si vous n’avez pas le logiciel Arduino, cliquez ici.
Capteur de lumière réveil
/ / Faites par Corbin Newhard / / licence : domaine Public
// TONES ==========================================
Commencez par définir la relation entre
Remarque, période et fréquence.
#define c 3830 / / 261 Hz
#define d 6428 / / 156 Hz
#define D 3219 / / 311 Hz
#define e 3038 / / 329 Hz
#define f 2864 / / 349 Hz
#define g 2550 / / 392 Hz
#define a 2272 / / 440 Hz
#define b 2028 / / 493 Hz
#define C 1912 / / 523 Hz
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 = 11 ;
int mené = 13 ;
void setup() {}
pinMode (speakerOut, sortie) ;
pinMode (led, sortie) ;
Serial.Begin (9600) ;
}
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 [] = {f, f, f, f, f, D, f, f, D, f, D, f, f, d, d, R, f, f, d, d, R} ;
int bat [] = {8, 8, 8, 8, 16, 8, 16, 16, 8, 16, 24, 8, 8, 8, 8, 1, 8, 8, 8, 8, 1} ;
int elements_valides = sizeof(melody) / 2 ; Longueur de la mélodie, pour une boucle.
Set global tempo longue de tempo = 15000 ;
Régler la durée de pause entre les notes int pause = 0 ;
La variable de boucle pour augmenter la longueur de repos int rest_count = 15 ;
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 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); / / bas
digitalWrite (speakerOut, basse) ; delayMicroseconds(tone_ / 2) ;
Garder une trace de combien de temps nous avons pulsé
elapsed_time += (tone_) ;
}
}
else {}
Temps de repos ; retardent le temps de la boucle
pour (int j = 0; j < rest_count; j ++) {}
Voir la NOTE sur rest_count
delayMicroseconds(duration) ;
} } }
void lightShow() {}
digitalWrite (conduit, en haut) ;
Delay(60) ;
digitalWrite (led, faible) ;
Delay(60) ;
}
LET THE WILD RUMPUS COMMENCE ===
void loop() {}
int sensorValue = analogRead(A0) ;
Serial.println(sensorValue) ;
Si (sensorValue > = 20) {//ADJUST cette valeur pour lumière des valeurs différentes
Mettre en place un compteur pour tirer de la mélodie [] et [bat]
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) ;
lightShow() ;
}
}
}