Created
February 10, 2017 12:23
-
-
Save stes/b1911c664ba38cc6bca0e391911ac6fa to your computer and use it in GitHub Desktop.
Star Wars Theme on Arduino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define NB_STEPS (1000) | |
byte sine[] = { | |
127,127,128,129,130,131,131,132,133,134,135,135,136,137,138,139,139,140,141,142,143,143,144,145,146,147,147,148,149,150,151,151,152,153,154,154,155,156,157,158,158,159,160,161,161,162,163,164,165,165,166,167,168,168,169,170,171,171,172,173,174,174,175,176,177,177,178,179,180,180,181,182,183,183,184,185,185,186,187,188,188,189,190,190,191,192,192,193,194,194,195,196,197,197,198,199,199,200,200,201,202,202,203,204,204,205,206,206,207,208,208,209,209,210,211,211,212,212,213,214,214,215,215,216,217,217,218,218,219,219,220,220,221,222,222,223,223,224,224,225,225,226,226,227,227,228,228,229,229,230,230,231,231,232,232,232,233,233,234,234,235,235,235,236,236,237,237,238,238,238,239,239,239,240,240,241,241,241,242,242,242,243,243,243,244,244,244,245,245,245,246,246,246,246,247,247,247,248,248,248,248,249,249,249,249,249,250,250,250,250,251,251,251,251,251,251,252,252,252,252,252,252,253,253,253,253,253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,253,253,253,253,253,253,253,253,252,252,252,252,252,252,252,251,251,251,251,251,250,250,250,250,250,249,249,249,249,248,248,248,248,247,247,247,247,246,246,246,245,245,245,245,244,244,244,243,243,243,242,242,242,241,241,240,240,240,239,239,239,238,238,237,237,237,236,236,235,235,234,234,234,233,233,232,232,231,231,230,230,229,229,228,228,227,227,226,226,225,225,224,224,223,223,222,222,221,221,220,220,219,218,218,217,217,216,216,215,214,214,213,213,212,212,211,210,210,209,208,208,207,207,206,205,205,204,203,203,202,201,201,200,200,199,198,198,197,196,195,195,194,193,193,192,191,191,190,189,189,188,187,186,186,185,184,184,183,182,181,181,180,179,178,178,177,176,176,175,174,173,173,172,171,170,170,169,168,167,166,166,165,164,163,163,162,161,160,160,159,158,157,156,156,155,154,153,152,152,151,150,149,149,148,147,146,145,145,144,143,142,141,141,140,139,138,137,137,136,135,134,133,133,132,131,130,129,129,128,127,127,126,125,125,124,123,122,121,121,120,119,118,117,117,116,115,114,113,113,112,111,110,109,109,108,107,106,105,105,104,103,102,102,101,100,99,98,98,97,96,95,94,94,93,92,91,91,90,89,88,88,87,86,85,84,84,83,82,81,81,80,79,78,78,77,76,76,75,74,73,73,72,71,70,70,69,68,68,67,66,65,65,64,63,63,62,61,61,60,59,59,58,57,56,56,55,54,54,53,53,52,51,51,50,49,49,48,47,47,46,46,45,44,44,43,42,42,41,41,40,40,39,38,38,37,37,36,36,35,34,34,33,33,32,32,31,31,30,30,29,29,28,28,27,27,26,26,25,25,24,24,23,23,22,22,21,21,20,20,20,19,19,18,18,17,17,17,16,16,15,15,15,14,14,14,13,13,12,12,12,11,11,11,10,10,10,9,9,9,9,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,15,15,15,16,16,16,17,17,18,18,19,19,19,20,20,21,21,22,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,34,34,35,35,36,36,37,37,38,39,39,40,40,41,42,42,43,43,44,45,45,46,46,47,48,48,49,50,50,51,52,52,53,54,54,55,55,56,57,57,58,59,60,60,61,62,62,63,64,64,65,66,66,67,68,69,69,70,71,71,72,73,74,74,75,76,77,77,78,79,80,80,81,82,83,83,84,85,86,86,87,88,89,89,90,91,92,93,93,94,95,96,96,97,98,99,100,100,101,102,103,103,104,105,106,107,107,108,109,110,111,111,112,113,114,115,115,116,117,118,119,119,120,121,122,123,123,124,125,126,127,127 | |
}; | |
int t = 0; | |
volatile int dt = 0; | |
void set_freq(float freq) { | |
t = 0; | |
dt = freq / 11; | |
} | |
void interrupted_delay(int duration) { | |
for (int i = 0; i < duration/2; i++) { | |
delayMicroseconds(1000); | |
} | |
} | |
void beep(int note, int duration) | |
{ | |
set_freq(note); | |
interrupted_delay(duration); | |
//Stop tone on buzzerPin | |
dt = 0; | |
interrupted_delay(50); | |
} | |
const int c = 261; | |
const int d = 294; | |
const int e = 329; | |
const int f = 349; | |
const int g = 391; | |
const int gS = 415; | |
const int a = 440; | |
const int aS = 455; | |
const int b = 466; | |
const int cH = 523; | |
const int cSH = 554; | |
const int dH = 587; | |
const int dSH = 622; | |
const int eH = 659; | |
const int fH = 698; | |
const int fSH = 740; | |
const int gH = 784; | |
const int gSH = 830; | |
const int aH = 880; | |
const int buzzerPin = 9; | |
const int ledPin1 = 12; | |
const int ledPin2 = 13; | |
int counter = 0; | |
void setup() { | |
// put your setup code here, to run once: | |
for (int i=0;i<8;i++) { | |
pinMode(i, OUTPUT); | |
} | |
cli(); | |
TCCR0A = 0; | |
TCCR0B = 0; | |
TCNT0 = 0; | |
OCR0A = 100; | |
TCCR0A |= (1 << WGM01); | |
TCCR0B |= (1 << CS11); | |
TIMSK0 |= (1 << OCIE0A); | |
sei(); | |
while(true) | |
{ | |
//Play first section | |
firstSection(); | |
//Play second section | |
secondSection(); | |
//Variant 1 | |
beep(f, 250); | |
beep(gS, 500); | |
beep(f, 350); | |
beep(a, 125); | |
beep(cH, 500); | |
beep(a, 375); | |
beep(cH, 125); | |
beep(eH, 650); | |
interrupted_delay(500); | |
//Repeat second section | |
secondSection(); | |
//Variant 2 | |
beep(f, 250); | |
beep(gS, 500); | |
beep(f, 375); | |
beep(cH, 125); | |
beep(a, 500); | |
beep(f, 375); | |
beep(cH, 125); | |
beep(a, 650); | |
interrupted_delay(650); | |
} | |
} | |
// 44 kHz | |
// f = dt / NB_STEPS * 44 kHz | |
ISR(TIMER0_COMPA_vect) { | |
PORTD = sine[t]; | |
t = (t + dt) % NB_STEPS; | |
} | |
void firstSection() | |
{ | |
beep(a, 500); | |
beep(a, 500); | |
beep(a, 500); | |
beep(f, 350); | |
beep(cH, 150); | |
beep(a, 500); | |
beep(f, 350); | |
beep(cH, 150); | |
beep(a, 650); | |
interrupted_delay(500); | |
beep(eH, 500); | |
beep(eH, 500); | |
beep(eH, 500); | |
beep(fH, 350); | |
beep(cH, 150); | |
beep(gS, 500); | |
beep(f, 350); | |
beep(cH, 150); | |
beep(a, 650); | |
interrupted_delay(500); | |
} | |
void secondSection() | |
{ | |
beep(aH, 500); | |
beep(a, 300); | |
beep(a, 150); | |
beep(aH, 500); | |
beep(gSH, 325); | |
beep(gH, 175); | |
beep(fSH, 125); | |
beep(fH, 125); | |
beep(fSH, 250); | |
interrupted_delay(325); | |
beep(aS, 250); | |
beep(dSH, 500); | |
beep(dH, 325); | |
beep(cSH, 175); | |
beep(cH, 125); | |
beep(b, 125); | |
beep(cH, 250); | |
interrupted_delay(350); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Don't work