const float R = 0;
const float c0 = 16.352;
const float d0 = 18.354;
const float e0 = 20.602;
const float f0 = 21.827;
const float g0 = 24.500;
const float a0 = 27.500;
const float b0 = 30.868;
const float c3 = c0 * 8;
const float d3 = d0 * 8;
const float e3 = e0 * 8;
const float f3 = f0 * 8;
const float g3 = g0 * 8;
const float a3 = a0 * 8;
const float b3 = b0 * 8;
const float e3b = (e3 + d3) /2;
const float b3b = (b3 + a3) /2;
const float a3b = (a3 + g3) /2;
const float c4 = c0 * 16;
const float d4 = d0 * 16;
const float e4 = e0 * 16;
const float f4 = f0 * 16;
const float g4 = g0 * 16;
const float a4 = a0 * 16;
const float b4 = b0 * 16;
const float c4s = (c4 + d4) / 2;
const float f4s = (f4 + g4) / 2;
const float f4b = (f4 + e4) / 2;
const float b4b = (b4 + a4) /2;
const float e4b = (e4 + d4) /2;
const float a4b = (a4 + g4) /2;
const float c5 = c0 * 32;
const float d5 = d0 * 32;
const float e5 = e0 * 32;
const float f5 = f0 * 32;
const float g5 = g0 * 32;
const float a5 = a0 * 32;
const float b5 = b0 * 32;
const float a5b = (a5 + g5) /2;
const float b5b = (b5 + a5) /2;
const float d5b = (d5 + c5) /2;
const float e5b = (e5 + d5) /2;
const float c5s = (c5 + d5) / 2;
const float f5s = (f5 + g5) / 2;
const int speak = 13;
const float c6 = c0 * 64;
const float d6 = d0 * 64;
const float e6 = e0 * 64;
const float f6 = f0 * 64;
const float g6 = g0 * 64;
const float a6 = a0 * 64;
const float b6 = b0 * 64;
const float d6b = (d6 + c6) /2;
void setup() {
pinMode(speak, OUTPUT);
}
void play_tone(int port, float f, long t) {
if (f > 0) {
const int T = 1000000 / f;
int d = T / 2;
int count = t / T;
for (int i = 0; i < count; i++) {
digitalWrite(port, HIGH);
delayMicroseconds(d);
digitalWrite(port, LOW);
delayMicroseconds(d);
}
} else { delay(t / 1000);}
}
float melody[][2] = {
{g4, 1},
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 2},
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 4},
//
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 2},
//
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 4},
{R, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16 / 3}, {a4b, 16}, {g4, 8}, {a4b, 8},
{b4b, 4}, {f4, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {d4, 8},
{e4b, 4}, {R, 512}, {e4b, 4},
{d4, 2},
{R, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {b4b, 8}, {a4b, 8},
{g4, 4}, {e4b, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {d4, 8},
{d4, 8}, {R, 512}, {d4, 16}, {e4b, 16}, {d4, 8}, {R, 512}, {d4, 16}, {e4b, 16},
{d4, 8}, {R, 512}, {d4, 16}, {e4b, 16}, {d4, 8}, {R, 512}, {d4, 16}, {e4b, 16},
{d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16},
{d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16},
{g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16},
{g4, 16}, {a4, 16}, {b4, 16}, {c5, 16}, {d5, 16}, {e5b, 16}, {f5, 16}, {g5, 16},
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 2},
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 8}, {g5, 16}, {b5b, 16}, {R, 512}, {b5, 16},
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 2},
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 4},
{R, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16 / 3}, {a4b, 16}, {g4, 8}, {a4b, 8},
{b4b, 4}, {f4, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {d4, 8},
{e4b, 4}, {R, 512}, {e4b, 4},
{d4, 8}, {c4, 16}, {d4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {d5, 16},
{e5b, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {b4b, 8}, {a4b, 8},
{g4, 4}, {e4b, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {f4, 8},
{g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16},
{g4, 16}, {a4, 16}, {b4, 16}, {c5, 16}, {d5, 4},
{c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16}, {b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16},
{b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16}, {b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16},
{c5, 16}, {a4b, 16}, {e4b, 16}, {a4b, 16}, {c5, 16}, {a4b, 16}, {e4b, 16}, {a4b, 16},
{c5, 16}, {g4, 16}, {d4, 16}, {g4, 16}, {b4, 4},
{c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16}, {b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16},
{b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16}, {b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16},
{c4, 16}, {a3b, 16}, {e3b, 16}, {a3b, 16}, {c4, 16}, {a3b, 16}, {e3b, 16}, {a3b, 16},
{c4, 16}, {g3, 16}, {d3, 16}, {g3, 16}, {b3, 4},
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 8}, {b5b, 8}, {g5, 4},
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 8}, {g5, 16}, {b5b, 16}, {R, 512}, {b5, 16},
{c6, 4}, {R, 512}, {c6, 16 / 3}, {b5b, 16},
{c6, 8}, {b5b, 8}, {a5b, 8}, {g5, 8},
{b5b, 16}, {a5b, 16}, {g5, 16}, {f5, 16}, {e5b, 8}, {f5, 8},
{g5, 8}, {R, 512}, {g5, 8}, {b5b, 4}, {R, 512},
{b5b, 4}, {R, 512}, {b5b, 16 / 3}, {a5b, 16},
{g5, 8}, {f5, 8}, {e5b, 8}, {f5, 8},
{g5, 16}, {e5b, 16}, {c5, 16}, {e5b, 16}, {g5, 8}, {f5, 8},
{e5b, 4}, {d5, 4},
{R, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16 / 3}, {a4b, 16}, {g4, 8}, {a4b, 8},
{b4b, 4}, {f4, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {d4, 8},
{e4b, 4}, {R, 512}, {e4b, 4},
{d4, 8}, {c4, 16}, {d4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {d5, 16},
{e5b, 8}, {c5, 16}, {d5, 16}, {e5b, 8}, {c5, 8},
{f5, 8}, {e5b, 8}, {d5, 8}, {c5, 8},
{b4b, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {b4b, 8}, {a4b, 8},
{g4, 4}, {e4b, 4},
{R, 8}, {d4, 16}, {e4b, 16}, {f4, 8}, {d4, 8},
{g4, 8}, {f4, 8}, {e4b, 8}, {d4, 8},
{d4, 8}, {R, 512}, {d4, 16}, {e4b, 16}, {d4, 8}, {R, 512}, {d4, 16}, {e4b, 16},
{d4, 8}, {R, 512}, {d4, 16}, {e4b, 16}, {d4, 8}, {R, 512}, {d4, 16}, {e4b, 16},
{d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16},
{d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16}, {d4, 16}, {e4b, 16},
{g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16}, {g4, 16}, {a4b, 16},
{g4, 16}, {a4, 16}, {b4, 16}, {c5, 16}, {d5, 16}, {e5b, 16}, {g5, 16}, {b5, 16},
{c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {c5, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16}, {b4b, 16}, {g4, 16}, {e4b, 16}, {g4, 16},
{b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16}, {b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16},
{b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16}, {b4b, 16}, {f4, 16}, {d4, 16}, {f4, 16},
{c5, 16}, {a4b, 16}, {e4b, 16}, {a4b, 16}, {c5, 16}, {a4b, 16}, {e4b, 16}, {a4b, 16},
{c5, 16}, {g4, 16}, {d4, 16}, {g4, 16}, {b4, 4},
{c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {c4, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16}, {b3b, 16}, {g3, 16}, {e3b, 16}, {g3, 16},
{b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16}, {b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16},
{b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16}, {b3b, 16}, {f3, 16}, {d3, 16}, {f3, 16},
{c4, 16}, {a3b, 16}, {e3b, 16}, {a3b, 16}, {c4, 16}, {a3b, 16}, {e3b, 16}, {a3b, 16},
{c4, 16}, {g3, 16}, {d3, 16}, {g3, 16}, {b3, 4}, {g3, 16}, {d3, 16}, {g3, 16},
{g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32},
{a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32},
{b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32}, {b4b, 16}, {R, 32},
{a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32}, {a4b, 16}, {R, 32},
{g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32}, {g4, 16}, {R, 32},
{g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32}, {g3, 16}, {R, 32},
{a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32}, {a3b, 16}, {R, 32},
{b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32}, {b3b, 16}, {R, 32},
{g4, 8}, {R, 8}, {a4b, 8}, {R, 8}, {g4, 2}, {R, 1},
};
void loop() {
const int BPM = 200;
const long MINUTE = 60000000;
const long T = (MINUTE / BPM) * 4;
int n = sizeof(melody) / sizeof(melody[0]);
for (int i = 0; i < n; i++) {
play_tone(speak, melody[i][0], T / melody[i][1]);
delay(50);
}
}