Robot hölje (6 / 7 steg)
Steg 6: Kodning sensorn
Lanettas fästman, Andrew, hjälpte oss vet vad noterna av låtarna och sedan när testning låtarna talar om för oss vilka anteckningar där utanför. Han var till stor hjälp!
Att veta frekvensen av anteckningarna var svårt i början. Det hjälpte när vi insåg hur noterna matchade piano på följande webbplats: http://en.wikipedia.org/wiki/Piano_key_frequencies (tack för hjälpen Andrew!) Arduino har ett bibliotek för anteckningar men vi hade redan gjort frekvenserna för anteckningar. Om du använder biblioteket låtarna kommer inte att fungera om du blandar i de anteckningar som du definierar med frekvenser. Att veta vilken typ av värden ljussensorn läser med olika ljus exponera du kan använda koden som ges i Arduino.
PIN Setup
int högtalare = 9.
int sensorPin = A3; Ljussensor ansluten
int sensorValue; variabel för att lagra värdet kommer från sensorn
Hemsida för anteckningar: http://www.phy.mtu.edu/~suits/notefreqs.html
int en = 440;
int b = 493.883;
int c = 523.251;
int e = 329.628;
int mc = 261.626;
int d = 293.665;
int f = 349.228;
int eflat = 311.127;
int bflat = 466.164;
int g = 391.995;
int nosound = 0;
Till vänster
Alla noter sätts i en matris
int totheleft [] = {d, f, f, d, f, f, nosound, eflat, f, f, eflat, f, f};
Hur länge varje not är 4 = fjärdedelsnot, 3 = kvartalet med dot, 8 = åttondelen noterar, 2 = halv anteckning
int durationleft [] = {16,16,8,16,16,4,1,16,16,8,16,16,4}.
Välj rätt, början av låten
int chooseright [] = {e, f, g, g, g, a, c, b, a, g, e, d, e, f, g, b, a, g, e, f};
int durationCTR [] = {4,4,3,16,16,8,8,8,8,4,4,4,4,3,8,9,16,8,8,2}.
Ställa in stiften, A3 är en ingång (hur mycket ljus) där talaren är en utgång (det är buller kommer ut)
void setup()
{
pinMode(speaker,OUTPUT);
pinMode (A3, indata);
}
void loop()
{
sensorValue = analogRead(sensorPin); läsa värdet från sensorn
om (sensorValue > = 40 & & sensorValue < = 100) //Light upptäckta
{
för (int thisNote = 0; thisNote < 100; thisNote ++) {//go genom mängd anteckningar
int noteDuration = 18000/durationleft [thisNote];
tonar (högtalare, totheleft [thisNote], noteDuration); //play varje inte
fördröjning (noteDuration * 0,30); //have kort tid mellan varje ton så att örat kan höra tonen
noTone(9);
}
}
annars om (sensorValue > 101) {//lots av ljus upptäcks
för (int thisNote = 0; thisNote < 100; thisNote ++) {
int noteDuration = 18000/durationCTR [thisNote];
Tone(Speaker,chooseright[thisNote],noteDuration);
Delay(noteDuration*0.30);
noTone(9);
}
}
annat //No upptäckt
{
noTone(9); gör ingenting
}
}