Stap 5:
zodat er u gaan, een leuke en gemakkelijke manier te gebruiken Arduino gewoon voor de lol, hier is de volledige code
// TONES ==========================================
Beginnen met het definiëren van de relatie tussen
Opmerking, periode, & frequentie.
#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
Een speciale opmerking, 'R', te vertegenwoordigen een rust definiëren
#define rest 0
// SETUP ============================================
Spreker op een PWM-pin (digitale 9, 10 of 11) instellen
int speakerOut = 9;
Willen wij debuggen op seriële out? 1 voor Ja, 0 voor Nee
int DEBUG = 1;
int sensorPin = A0; Selecteer de invoer pin voor de ldr
unsigned int sensorValue = 0; variabele de waarde afkomstig van de ldr op te slaan
VOID Setup {}
pinMode (speakerOut, OUTPUT);
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
Als (DEBUG) {}
Serial.begin(9600); Seriële uit als we willen dat foutopsporing instellen
}
}
MELODIE en TIMING ===
[Melody] is een array van nota's, vergezeld van beats [],
waarin elke nota's relatieve lengte (hogere # en langere opmerking)
int melodie [] = {RE, MI, SI, Rest, RE, RE, MI, RE, SI, Rest, LA, LA, FA, Rest, SOL, SOL, RE, Rest};
int verslaat [] = {8, 8, 8, 16, 64, 8, 8, 8, 16, 64,8,8,16,32,8,8,16,128};
int MAX_COUNT = sizeof(melody) / 2; Melodie de lengte, voor een lus.
Set algehele tempo
lange tempo = 80000;
Lengte van de pauze tussen notities instellen
int pauze = 1000;
Lus variabele meer Rest lengte
int rest_count = 100; <-BLETCHEROUS HACK; Zie ' opmerkingen '
Kern variabelen initialiseren
int tone_ = 0;
int verslaan = 0;
lange duur = 0;
// PLAY TONE ==============================================
Pulse de spreker om af te spelen van een Toon voor een bepaalde duur
ongeldig playTone() {}
lange elapsed_time = 0;
Als (tone_ > 0) {als (tone_ == 3400 || tone_ == 3038) {}
digitalWrite (2, HIGH);
digitalWrite (3, laag);
digitalWrite (4, laag);
}
else if (tone_ == 2028 || tone_ == 2272) {}
digitalWrite (2, laag);
digitalWrite (3, hoge);
digitalWrite (4, laag); }
else if (tone_ == 2864 || tone_ == 2550) {digitalWrite (2, laag);
digitalWrite (3, laag);
digitalWrite (4, HIGH); } / / Als dit niet een Rest beat, terwijl de Toon heeft
minder lang dan 'duur', pulse spreker hoge en lage gespeeld
terwijl (elapsed_time < duur) {}
digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);
DOWN
digitalWrite (speakerOut, laag);
delayMicroseconds(tone_ / 2);
Bijhouden van hoe lang we gepulseerde
elapsed_time += (tone_);
}
}
else {/ / Rest verslaan; lus keer uitstellen
for (int j = 0; j < rest_count; j ++) {/ / zienoot op rest_count
delayMicroseconds(duration);
}
}
}
LAAT DE WILDE RUMPUS BEGINNEN ===
void loop {}
Instellen van een teller te trekken uit de melodie [] en beats]
de waarde van de ldr leest:
sensorValue = analogRead(sensorPin);
if(sensorValue<500) {}
//
//
for (int i = 0; ik < MAX_COUNT; i ++) {}
tone_ = melodie [i];
Beat = slagen [i];
duur = beat * tempo; Timing instellen
playTone();
Een pauze tussen notities...
delayMicroseconds(pause);
Als (DEBUG) {/ / als foutopsporing, verslag lus, Toon, beat, en duur
Serial.Print(i);
Serial.Print(":");
Serial.Print(Beat);
Serial.Print("");
Serial.Print(tone_);
Serial.Print("");
Serial.println(duration);
}
}} / / set van de LED op
else {}
digitalWrite (2, laag);
digitalWrite (3, laag);
digitalWrite (4, laag); } / / set van de LED op
}
het foutopsporingsprogramma deel kunnen nuttig zijn voor educatieve doeleinden, aangezien u zien kunt de waarden worden opgenomen en welke tinten worden gespeeld door het apparaat