RTTL låtar på arduino (4 / 8 steg)
Steg 4: Kopiera och klistra in detta i IDE!
En rolig skiss för att demonstrera användningen av funktionen tone() skriven av Brett Hagman.
Detta spelar RTTTL (ringsignal Text överföra språk) låtar med den
nu inbyggda tone() kommando i ledningar och Arduino.
Skrivet av Brett Hagman
http://www.roguerobotics.com/
Att spela utdata på en liten högtalare (dvs 8 ohm eller högre), helt enkelt använda
en 1K ohms motstånd från utdata pin till högtalaren och Anslut den andra
sidan av talaren att marken.
Du kan få fler RTTTL låtar från
http://www.roguerobotics.com/
CONST int tonePin = 8; rEDI styrelsen
CONST int tonePin = 13. godtyckliga för arduino brädor, ange detta till vad du vill
#define OCTAVE_OFFSET 0
Dessa värden kan också hittas som konstanter i tonen biblioteket (Tone.h)
int noterar [] = {0,
262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988,
1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976,
2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951
};
char * sång = "GeorgeofthejungleTheme:d = 4, o = 6, b = 127:f5, p, p, c5, p, p, f5, p, f5, p, f5, a5, p, c, p, f5, p, f5, p, g5, g5, p, a5, p, p, p, f5, f5, f5, f5, g5, g5, p, f5, p, p, p, f";
char * sång = "OneMoreT:d = 16, o = 5, b = 125:4e, 4e, 4e, 4e, 4e, 4e, 8 p, 4 d #., 4e, 4e, 4e, 4e, 4e, 4e, 8 p, 4 d #., 4e, 4e, 4e, 4e, 4e, 4e, 8 p, 4 d #., 4f # 4f # 4f #, 4f #, 4f #, 4f #, 8f #, 4 d #., 4e, 4e, 4e, 4e, 4e, 4e, 8 p, 4 d #., 4e, 4e, 4e, 4e, 4e, 4e, 8 p, 4 d #., 1f #, 2f #";
char * sång = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6";
char * sång = "Indiana: d = 4, o = 5, b = 250:e, 8 p, 8f, 8 g, 8 p, 1 c 6, 8 s., d, 8 p, 8e, 1f, p., g, 8 p, 8a, 8b, 8 p, 1f6, p, a, 8 p, 8 b, 2 c 6, 2 d 6, 2e6, e, 8 p, 8f, 8 g, 8 p, 1 c 6, p, d6, 8 p, 8e6, 1f.6, g, 8 p, 8 g, e.6, 8 p, d6, 8 p, 8 g, e.6, 8 p, d6, 8 p, 8 g, f.6, 8 p, e6 , 8p, 8d 6, 2c 6";
char *song = "TakeOnMe:d=4,o=4,b=160:8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5,8f#5,8e5,8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p , 8d 5, 8p, 8f #5, 8p, 8f #5, 8p, 8f #5, 8e5, 8e5 ";
char * sång = "Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6";
char * låten = "Muppets:d = 4, o = 5, b = 250:c6, c6, a, b, 8a, b, g, p, c6, c6, en, 8b, 8a, 8 p, g., p, e, e, g, f, 8e, f, 8 c 6, 8 c, 8 d, e, 8e, 8e, 8 p, 8e, g, 2 p, c6, c6, a, b, 8a, b, g, p, c6, c6, en, 8b, a, g., p, e, e, g, f, 8e f, 8 c 6, 8 c, 8 d, e, 8e, d, 8 d, c ";
char * låten = "Xfiles:d = 4, o = 5, b = 125:e, b, a, b, d6, 2b, 1 p, e, b, en, b, e6, 2b, 1 p, g6, f #6, e6, d6, e6, 2b., 1 p, g6, f #6, e6, d6, f #6, 2b, 1 p, e, b, a, b, d6, 2b, 1 p, e, b, a, b, e6, 2b, 1 p, e6, 2b.";
char * sång = "Looney: d = 4, o = 5, b = 140:32 p, c6, 8f6, 8e6, 8 d 6, 8 c 6, a., 8 c 6, 8f6, 8e6, 8 d 6, 8 d #6,e.6,8e6,8e6,8c6,8d6,8c6,8e6,8c6,8d6,8a,8c6,8g,8a #, 8a, 8f";
char * sång = "20thCenFox:d = 16, o = 5, b = 140:b, 8 p, b, b, 2b, p, c6, 32 p, b, 32 p, c6, 32 p, b, 32 p, c6, 32 p, b, 8 p, b, b, b, 32 p, b, 32 p, b, 32 p, b, 32 p, b, 32 p, b, 32 p, b, 32 p, g #, 32 p, a, 32 p, b, 8 p, b, b, 2b, 4 p, 8e, 8 g #, 8 b, 1 c# 6, 8f #, 8a, 8 c# 6, 1e6 8a, 8 c# 6, 8e6, 1e6, 8b, 8 g #, 8a, 2b ";
char *song = "Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6";
char * sång = "MASH:d = 8, o = 5, b = 140:4a, 4 g, f #, g, p, f #, p, g, p, f #, p, 2e., p, f #, e, 4f #, e, f #, p, e, p, 4 d., p, f #, 4e, d, e, p, d, p, e, p, d, p, 2 c#., p, d, c#, 4 d, c#, d, p, e, p, 4f #, p, a, p, 4b, a, b, p, en p, b, p, 2a, 4 p, a, b, a, 4b, a, b, p, 2a., a, 4f #, a,b,p,d6,p,4e.6,d6,b,p,a,p, 2b ";
char *song = "StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6";
char * sång = "GoodBad:d = 4, o = 5, b = 56:32 p, 32a #, 32d #6, 32a #, 32d #6, 8a #., 16f #., 16 g #., d #, 32a #, 32d #6, 32a #, 32d #6, 8a #., 16f #., 16 g #., c# 6, 32a #, 32d #6, 32a #, 32d #6, 8a #., 16f #., 32f. 32d #., c#, 32a #, 32d #6, 32a #, 32d #6, 8a #., 16 g #., d #";
char * sång = "TopGun:d = 4, o = 4, b = 31:32 p, 16 c#, 16 g #, 16 g #, 32f #, 32f, 32f #, 32f, 16 d #, 16 d #, 32 c#, 32d #, 16f, 32d #, 32f, 16f #, 32f, 32 c#, 16f, d #, 16 c#, 16 g #, 16 g #, 32f #, 32f, 32f #, 32f, 16 d #, 16 d #, 32 c#, 32d # 16f, 32d #, 32f, 16f #, 32f, 32 c#, g #";
char * sång = "A-laget: d = 8, o = 5, b = 125:4 d #6, a #, 2d #6, 16 p, g #, 4a #, 4 d #., p, 16 g, 16a #, d #6, a #, f6, 2d #6, 16 p, c#.6, 16 c 6, 16a #, g #., 2a #";
char *song = "Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#. , 16a #6, 32g 6, 16f6, 16a #., 16f6, 32d #6, 32d 6, 32d 6, 32d #6, 32f6, 16a #, 16c.6,32d6, 32d #6, 32f6, 16a #, 16c.6,32d6, 32d #6, 32f6, 16a #6, 16c 7, 8a # 6";
char * sång = "Jeopardy: d = 4, o = 6, b = 125:c, f, c, f5, c, f, 2 c, c, f, c, f, a., 8 g, 8f, 8e, 8 d, 8 c#, c, f, c, f5, c, f, 2 c, f., 8 d, c, en #5, a5, g5, f5, p, d #, g #, d #, g #5, d #, g #, 2d #, d #, g #, d #, g #, c.7, 8a #, 8 g #, 8 g, 8f, 8e, d # , g #, d #, g #5, d #, g #, 2d #, g #., 8f, d #, c#, c, p, en #5, p, g #.5, d #, g #";
char * sång = "Gadget: d = 16, o = 5, b = 50:32d #, 32f, 32f #, 32 g #, #, f #, a, f, g #, f #, 32d #, 32f, 32f #, 32 g #, #, d #6, 4 d 6, 32d #, 32f, 32f #, 32 g #, #, f #, a, f, g #, f #, 8 d #";
char * sång = "Smurfs:d = 32, o = 5, b = 200:4 c# 6, 16 p, 4f #6, p, 16 c# 6, p, 8 d #6, p, 8b, p, 4 g #, 16 p, 4 c# 6, p, 16a #, p, 8f #, p, 8a #, p, 4 g #, 4 p, g #, p, en #, p, b, p, c6, p, 4 c# 6, 16 p, 4f #6, p, 16 c# 6, p, 8 d #6, p, 8b, p, 4 g #, 16 p, 4 c# 6, p, 16a # , p, 8b, p, 8f, p, 4f #";
char * sång = "MahnaMahna:d = 16, o = 6, b = 125:c#, c., b5, 8a #.5, 8f. 4 g #, #, g., 4 d #, 8 p, c#, c., b5, 8a #.5, 8f., g #., 8a #., 4 g, 8 p, c#, c., b5, 8a #.5, 8f. 4 g #, f, g., 8 d #., f, g., 8 d #., f, 8 g, 8 d #., f, 8 g, d #, 8 c, en #5, 8 d #., 8 d #., 4 d #, 8 d #.";
char * sång = "LeisureSuit:d=16,o=6,b=56:f.5,f#.5,g.5,g#5,32a#5,f5,g#.5,a#.5,32f5,g#5,32a#5,g#5,8c#.,a#5,32c#,a5,a#.5,c#.,32a5,a#5,32c#,d#,8e,c#.,f.,f.,f.,f.,f,32e,d#,8d,a#.5,e,32f,e,32f,c#,d#.,c#";
char * låten = "DangerMo:d = 4, o = 5, b = 355:a., 8 g, a, 8a, p, 8a4, 8 p, d, p, a., 8 g, en, 8a, p, 8a4, 8 p, d, p, en, en, ett #, en #, en #, en #, en #, #, en #, c6, 2a, p, 8a4, 8 p, d, p, a., 8 g, en, 8a, p, 8a4, 8 p, d, p, a., 8 g, en, 8a, p, 8a4, 8 p, d, p ett, a, a #, en #, en #, en #, en #, en #, en #, c6, 2 d 6, p, 8a4, 8 p, d, p, a., 8a, 2a #., 8a #4, 8 p, d #, 2 p, a #, 2a #, 2f #, 2d #, en #., 8a #, 2b., 8b4, 8 p, e, 2 p, b, 2b, 2 g, 2e, b., 8 d 6, 1e.6, e6, 8e6, 8e ";
char * sång = "MissionImp:d = 16, o = 6, b = 95:32d, 32d #, 32d, 32d #, 32d, 32d #, 32d, 32d #, 32d, 32d, 32d #, 32e, 32f, 32f #, 32 g, g, 8 p, g, 8 p, a #, p, c7, p, g, 8 p, g, 8 p, f, p, f #, p, g, 8 p, g, 8 p, a #, p, c7, p, g, 8 p, g, 8 p, f, p, f #, p, en #, g, 2d, 32 p, #, g 2 c#, 32 p, a #, g, 2 c, en #5, 8 c, 2 p, 32 p, en #5, g5, 2f #, 32 p, en #5, g5, 2f, 32 p, en #5, g5, 2e, d #, 8 d ";
void setup(void)
{
Serial.BEGIN(9600);
}
#define isdigit(n) (n > = "0" & & n < = '9')
void play_rtttl(char *p)
{
Absolut ingen felkontroll i här
byte default_dur = 4;
byte default_oct = 6;
int bpm = 63.
int num;
lång wholenote;
lång varaktighet;
byte Obs;
byte skala.
format: d = N, o = N, b = NNN:
hitta i början (hoppa över namn, etc)
medan (* p! = ':') p ++; Ignorera namn
p ++; hoppa över ":'
få standardvaraktighet
om (* p == hade ")
{
p ++; p ++; hoppa över "d ="
NUM = 0;
While(isdigit(*p))
{
NUM = (num * 10) + (* p ++ - '0');
}
om (num > 0) default_dur = num;
p ++; hoppa över kommatecken
}
Serial.Print ("ddur:"); Serial.println (default_dur, 10);
få standard octave
om (* p == ' o ')
{
p ++; p ++; hoppa över "o ="
NUM = * p ++ - '0';
om (num > = 3 & & num < = 7) default_oct = num;
p ++; hoppa över kommatecken
}
Serial.Print ("doct:"); Serial.println (default_oct, 10);
få BPM
om (* p == "b")
{
p ++; p ++; hoppa över "b ="
NUM = 0;
While(isdigit(*p))
{
NUM = (num * 10) + (* p ++ - '0');
}
BPM = num;
p ++; hoppa över kolon
}
Serial.Print ("bpm:"); Serial.println (bpm, 10);
BPM uttrycker oftast antalet kvartal sedlar per minut
wholenote = (60 * 1000L / bpm) * 4; Detta är dags för hela Obs (i millisekunder)
Serial.Print ("wn:"); Serial.println (wholenote, 10);
nu börja Obs loop
While(*p)
{
först får notera varaktighet, om den är tillgänglig
NUM = 0;
While(isdigit(*p))
{
NUM = (num * 10) + (* p ++ - '0');
}
IF(NUM) längd = wholenote / num;
annat varaktighet = wholenote / default_dur; Vi kommer att behöva kontrollera om vi har en prickad not efter
nu får meddelandet
Obs = 0;
Switch(*p)
{
fallet "c":
Obs = 1;
bryta;
fall skulle ":
Obs = 3;
bryta;
fallet "e":
Obs = 5;
bryta;
fallet "f":
Obs = 6;
bryta;
fallet "g":
Obs = 8.
bryta;
fallet "a":
Obs = 10;
bryta;
fallet "b":
Obs = 12.
bryta;
fallet "p":
standard:
Obs = 0;
}
p ++;
nu får valfri '#' skarp
om (* p == '#')
{
Obs ++;
p ++;
}
nu får valfri '. "prickad not
om (* p == ".")
{
Längd + = Varaktighet/2.
p ++;
}
nu får skala
IF(isdigit(*p))
{
skala = * p - '0';
p ++;
}
annat
{
skala = default_oct;
}
skala += OCTAVE_OFFSET;
om (* p == ",")
p ++; hoppa över kommatecken för nästa not (eller vi kan vara i slutet)
nu spela anteckningen
IF(Note)
{
Serial.Print ("spela:");
Serial.Print (skala, 10). Serial.Print(' ');
Serial.Print (Obs, 10); Serial.Print ("(");
Serial.Print (anteckningar [(scale-4) * 12 + anmärkning], 10);
Serial.Print(")");
Serial.println (längd, 10);
tonen (tonePin, anteckningar [(scale-4) * 12 + Anm]);
Delay(duration);
noTone(tonePin);
}
annat
{
Serial.Print ("pausa:");
Serial.println (längd, 10);
Delay(duration);
}
}
}
void loop(void)
{
play_rtttl(Song);
Serial.println("Done.");
While(1);
}
Om detta görs på rätt sätt bör det kompilera utan fel!