I gryningen alarmklocka (3 / 4 steg)
Steg 3: Koden
Detta är koden för att ladda upp till Arduino att köra denna krets. Piezo summern tar upp det mesta av koden. Denna version spelar Mr Roboto, men du kan ändra koden för att göra det spela vilken låt du vill, se bara till att frekvensen i den första förklaringen överensstämmer med de anteckningar du vill spela. Den .ino filen bifogas också om du känner dig lat. Om du inte har programvaran Arduino, Klicka här.
Ljussensor väckarklocka
/ / Gjord av Corbin Newhard / / licens: Public Domain
// TONES ==========================================
Börja med att definiera förhållandet mellan
Obs, period, och frekvens.
#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
Definiera en särskild anmärkning, "R", som representerar en vila
#define R 0
// SETUP ============================================
Ställ in högtalare på en PWM stift (digital 9, 10 eller 11)
int speakerOut = 11;
int ledde = 13.
void setup() {
pinMode (speakerOut, produktionen);
pinMode ledde (, OUTPUT);
Serial.BEGIN (9600);
}
MELODI och TIMING ===
Melody [] är en matris av anteckningar, tillsammans med beats [],
som sätter varje ton relativa längd (högre #, längre anteckning)
int melodi [] = {f, f, f, f, f, D, f, f, D, f, D, f, f, d, d, R, f, f, d, d, R};
int slår [] = {8, 8, 8, 8, 16, 8, 16, 16, 8, 16, 24, 8, 8, 8, 8, 1, 8, 8, 8, 8, 1};
int MAX_COUNT = sizeof(melody) / 2; Melody längd, för looping.
Ange övergripande tempo lång tempo = 15000;
Ange längden på paus mellan anteckningar int paus = 0;
Loop variabel att öka resten längd int rest_count = 15.
Initiera core variabler int tone_ = 0; int slå = 0; lång varaktighet = 0;
// PLAY TONE ==============================================
Puls talaren att spela en ton för en viss varaktighet
void playTone() {
lång elapsed_time = 0;
om (tone_ > 0) {
om detta inte är en resten beat, medan tonen har
spelat mindre långt än "varaktighet", puls högtalare hög och låg
medan (elapsed_time < varaktighet) {
digitalWrite(speakerOut,HIGH); delayMicroseconds(tone_ / 2); / / ner
digitalWrite (speakerOut, låg); delayMicroseconds(tone_ / 2);
Hålla reda på hur länge vi pulsade
elapsed_time += (tone_);
}
}
annat {
Resten beat; loop gånger dröjsmål
för (int j = 0; j < rest_count; j ++) {
Se kommentaren om rest_count
delayMicroseconds(duration);
} } }
void lightShow() {
digitalWrite (ledde, högt);
Delay(60);
digitalWrite (ledde, låg);
Delay(60);
}
LÅT VILDA BRÅK BÖRJA ===
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
om (sensorValue > = 20) {//ADJUST detta värde för olika ljus värden
Ställ in en räknare för att dra från melody [] och [slag]
för (int jag = 0; jag < MAX_COUNT; i ++) {
tone_ = melodi [i];
slå = beats [i];
längd = beat * tempo; Ställ in timing
playTone();
En paus mellan anteckningar...
delayMicroseconds(pause);
lightShow();
}
}
}