Simple program playing a song using PWM on a speaker.

Dependencies:   mbed

wurlitzer.cpp

Committer:
lvagasi
Date:
2015-10-02
Revision:
0:b34f133646a8

File content as of revision 0:b34f133646a8:

#include "mbed.h"

PwmOut speaker(PB_4);               // Speaker
DigitalOut myled(PA_10);

const float scala[38] = { 0.0f, 108.0f, 112.5f, 121.5f, 129.6f, 135.0f, 144.0f, 150.0f, 162.0f, 172.8f, 180.0f, 194.4f, 202.5f,
                                216.0f, 225.0f, 243.0f, 259.2f, 270.0f, 288.0f, 300.0f, 324.0f, 345.6f, 360.0f, 388.8f, 405.0f,
                                432.0f, 450.0f, 486.0f, 518.4f, 540.0f, 576.0f, 600.0f, 648.0f, 691.2f, 720.0f, 777.6f, 810.0f,
                                864.0f };

const uint32_t song[54][2] = { {16, 4}, {18, 4}, {20, 4}, {18, 4}, {16, 2}, { 0, 2}, {16, 4}, {18, 4}, {20, 4}, {18, 4}, {16, 2}, { 0, 2}, {20, 4}, {20, 4}, {21, 4}, {21, 4},
                               {20, 4}, {20, 4}, {18, 2}, {20, 4}, {20, 4}, {21, 4}, {21, 4}, {20, 4}, {20, 4}, {18, 2}, {20, 4}, {18, 4}, {20, 4}, {21, 4}, {23, 4}, {21, 4},
                               {20, 4}, {18, 4}, {20, 4}, {18, 4}, {20, 4}, {21, 4}, {23, 4}, {21, 4}, {20, 4}, {18, 4}, {16, 4}, {18, 4}, {20, 4}, {18, 4}, {16, 2}, { 0, 2},
                               {16, 4}, {18, 4}, {20, 4}, {18, 4}, {16, 2}, { 0, 2} };


int main() {
    float tone;
    int i;
    
    myled = 1;

    for (i = 0; i < 54; i++) {
        if (song[i][0] > 0.0f) {
            tone = float(1.0f/scala[song[i][0]]);
            speaker.period(tone);
            speaker = 0.5;
        } else {
            speaker = 0;
        }
        wait(float(1.0f/song[i][1]));
    }
    while (1) {
        myled = 0; // LED is ON
        wait(0.2); // 200 ms
        myled = 1; // LED is OFF
        wait(1.0); // 1 sec
    }

}