Arduino kontrollerade blinkande Fairy julbelysningen med Jingle Bells (6 / 12 steg)
Steg 6: Att göra lysdioder blixten med ljud
Du behöver:- USB-kabel
Detta är ungefär samma som föregående kod, men vi har lagt till LED tillbaka i som i funktionen blink. Det kommer att sätta på när anteckningen spelar och stänga när anteckningen slutar
TONER === / / Start genom att definiera förhållandet mellan
Obs, period, och frekvens.
#define C 2100
#define D 1870
#define E 1670
#define f 1580 / / verkar inte gillar versalt F
#define G 1400
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 = 9;
int ledde = 13.
Vill vi felsökning på serial ut? 1 för Ja, 0 för no
int DEBUG = 1;
void setup() {
pinMode (speakerOut, produktionen);
pinMode ledde (, OUTPUT);
om (DEBUG) {
Serial.BEGIN(9600); Ställa in följetong ut om vi vill felsökning
}
}
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 [] = {E, E, E, R,
E, E, E, R,
E, G, C, D, E, R,
f, f, f, f, f, E, E, E, E, D, D, E, D, R, G, R,
E, E, E, R,
E, E, E, R,
E, G, C, D, E, R,
f, f, f, f, f, E, E, E, G, G, f, D, C, R};
int MAX_COUNT = sizeof(melody) / 2; Melody längd, för looping.
Ange övergripande tempo
långa tempo = 10000;
Ange längden på paus mellan anteckningar
int paus = 1000;
Loop variabel att öka resten längd
int rest_count = 100; <-BLETCHEROUS hacka; Se anteckningar
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
digitalWrite (ledde, högt);
medan (elapsed_time < varaktighet) {
digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);
NED
digitalWrite (speakerOut, låg);
delayMicroseconds(tone_ / 2);
Hålla reda på hur länge vi pulsade
elapsed_time += (tone_);
}
digitalWrite (ledde, låg);
}
annat {/ / resten slå, loop gånger försenar
för (int j = 0; j < rest_count; j ++) {/ / se anmärkning på rest_count
delayMicroseconds(duration);
}
}
}
LÅT VILDA BRÅK BÖRJA ===
void loop() {
för (int jag = 0; jag < MAX_COUNT; i ++) {
tone_ = melodi [i];
slå = 50;
längd = beat * tempo; Ställ in timing
playTone();
En paus mellan anteckningar...
delayMicroseconds(pause);
}
}