Star_Wars_The_Imperial_March Piezo Buzzer Song

Committer:
dfraj
Date:
Mon Nov 18 12:58:22 2019 +0000
Revision:
0:de84a99fc49f
Star Wars - The Imperial March Piezo Buzzer Song

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dfraj 0:de84a99fc49f 1 #include "mbed.h"
dfraj 0:de84a99fc49f 2
dfraj 0:de84a99fc49f 3 PwmOut speaker(p26);
dfraj 0:de84a99fc49f 4 AnalogIn pot1(p19);
dfraj 0:de84a99fc49f 5 AnalogIn pot2(p20);
dfraj 0:de84a99fc49f 6 DigitalIn joystickCenter(p14);
dfraj 0:de84a99fc49f 7
dfraj 0:de84a99fc49f 8 int main() {
dfraj 0:de84a99fc49f 9 // note frequencies in Hz
dfraj 0:de84a99fc49f 10 // rows: C C# D Eb E F F# G G# A Bb B
dfraj 0:de84a99fc49f 11 //columns: 0 1 2 3 4 5 6 7 8
dfraj 0:de84a99fc49f 12
dfraj 0:de84a99fc49f 13 enum noteNames {C, Cs, D, Eb, E, F, Fs, G, Gs, A, Bb, B};
dfraj 0:de84a99fc49f 14 float nt[12][9] = { {16.35}, {17.32}, {18.35}, {19.45}, {20.60}, {21.83},
dfraj 0:de84a99fc49f 15 {23.12}, {24.5}, {25.96}, {27.5}, {29.14}, {30.87} };
dfraj 0:de84a99fc49f 16 for (int i = 0; i < 12; i++)
dfraj 0:de84a99fc49f 17 for (int j = 1; j < 9; j++)
dfraj 0:de84a99fc49f 18 nt[i][j] = nt[i][j-1] * 2;
dfraj 0:de84a99fc49f 19
dfraj 0:de84a99fc49f 20 while(1) {
dfraj 0:de84a99fc49f 21 //int scale = pot2 * 8;
dfraj 0:de84a99fc49f 22 float speed = 0.05 + pot1; // minimum wait is 50 ms
dfraj 0:de84a99fc49f 23 float notesCiciban[] = {nt[A][1], 0, nt[A][1], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 24 nt[F][1], 0, nt[C][2], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 25 nt[F][1], 0, nt[C][2], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 26 nt[E][2], 0, nt[E][2], 0, nt[E][2], 0,
dfraj 0:de84a99fc49f 27 nt[F][2], 0, nt[C][2], 0, nt[Gs][1], 0,
dfraj 0:de84a99fc49f 28 nt[F][1], 0, nt[C][2], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 29 nt[A][2], 0, nt[A][1], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 30 nt[A][2], 0, nt[Gs][2], 0, nt[G][2], 0,
dfraj 0:de84a99fc49f 31 nt[Fs][2], 0, nt[F][2], 0, nt[Fs][2], 0,
dfraj 0:de84a99fc49f 32 nt[Bb][1], 0, nt[Eb][2], 0, nt[D][2], 0,
dfraj 0:de84a99fc49f 33 nt[Cs][2], 0, nt[C][2], 0, nt[B][1], 0,
dfraj 0:de84a99fc49f 34 nt[C][2], 0, nt[F][1], 0, nt[Gs][1], 0,
dfraj 0:de84a99fc49f 35 nt[F][1], 0, nt[Gs][1], 0, nt[C][2], 0,
dfraj 0:de84a99fc49f 36 nt[A][1], 0, nt[C][2], 0, nt[E][2], 0,
dfraj 0:de84a99fc49f 37 nt[A][2], 0, nt[A][1], 0, nt[A][1], 0,
dfraj 0:de84a99fc49f 38 nt[A][2], 0, nt[Gs][2], 0, nt[G][2], 0,
dfraj 0:de84a99fc49f 39 nt[Fs][2], 0, nt[F][2], 0, nt[Fs][2], 0,
dfraj 0:de84a99fc49f 40 nt[Bb][1], 0, nt[Eb][2], 0, nt[D][2], 0,
dfraj 0:de84a99fc49f 41 nt[Cs][2], 0,};
dfraj 0:de84a99fc49f 42 float beatCiciban[] = {1, 0.5, 1, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 43 0.5, 0.5, 0.5, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 44 0.5, 0.5, 0.5, 0.5, 2, 0.5,
dfraj 0:de84a99fc49f 45 1, 0.5, 1, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 46 0.5, 0.5, 0.5, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 47 0.5, 0.5, 0.5, 0.5, 2, 0.5,
dfraj 0:de84a99fc49f 48 1, 0.5, 0.5, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 49 1, 0.5, 0.5, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 50 0.25, 0.5, 0.25, 0.5, 0.25, 0.5,
dfraj 0:de84a99fc49f 51 0.25, 0.5, 1, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 52 0.5, 0.5, 0.25, 0.5, 0.25, 0.5,
dfraj 0:de84a99fc49f 53 0.25, 0.5, 0.25, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 54 0.5, 0.5, 0.5, 0.5, 1, 0.5,
dfraj 0:de84a99fc49f 55 0.5, 0.5, 0.5, 0.5, 2, 0.5,
dfraj 0:de84a99fc49f 56 1, 0.5, 0.5, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 57 1, 0.5, 0.5, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 58 0.25, 0.5, 0.25, 0.5, 0.25, 0.5,
dfraj 0:de84a99fc49f 59 0.25, 0.5, 1, 0.5, 0.5, 0.5,
dfraj 0:de84a99fc49f 60 0.5, 0.5};
dfraj 0:de84a99fc49f 61
dfraj 0:de84a99fc49f 62 for (int i = 0; i < 109; i++) {
dfraj 0:de84a99fc49f 63 speaker.period(1 / (4*notesCiciban[i]) );
dfraj 0:de84a99fc49f 64 speaker = 0.75;
dfraj 0:de84a99fc49f 65 wait(speed * beatCiciban[i]);
dfraj 0:de84a99fc49f 66 }
dfraj 0:de84a99fc49f 67 if (joystickCenter) // press joystick center to stop playing
dfraj 0:de84a99fc49f 68 break;
dfraj 0:de84a99fc49f 69 }
dfraj 0:de84a99fc49f 70 }