Skip to content

Instantly share code, notes, and snippets.

@stes
Created February 10, 2017 12:23
Show Gist options
  • Save stes/b1911c664ba38cc6bca0e391911ac6fa to your computer and use it in GitHub Desktop.
Save stes/b1911c664ba38cc6bca0e391911ac6fa to your computer and use it in GitHub Desktop.
Star Wars Theme on Arduino
#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);
}
@Sidsta123
Copy link

Don't work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment