a MIDI-to-Morse code application.

Dependencies:   MIDI REnc button mbed morse

main.cpp

Committer:
ChuckTimber
Date:
2014-07-13
Revision:
5:decb31e2efa4
Parent:
4:98b4e2f46789
Child:
6:7405805be717

File content as of revision 5:decb31e2efa4:

#include "mbed.h"
#include "button.h"

#define FREQ 800
DigitalOut myled(LED1);

char* codes[] = { ".-", "-...", "-.-.", "-..", ".",
                  "..-.", "--.", "....", "..", ".---",
                  "-.-", ".-..", "--", "-.", "---",
                  ".--.", "--.-", ".-.", "...", "-",
                  "..-", "...-", ".--", "-..-", "-.--", "--..", " "
                };
char* nums[] = { "-----", ".----", "..---", "...--", "....-",
                 ".....", "-....", "--...", "---..", "----."
               };

char* marks[] = { ".-.-.-",  // '.'
                  "--..--",  // ','
                  "..--..",  // '?'
                  "-.-.--",  // '!'
                  "-....-",  // '-'
                  "-..-.",   // '/'
                  ".--.-.",  // '@'
                  "-.--.",   // '('
                  "-.--.-",  // ')'
                  "-...-",   // '='
                  ".-..-.",  // '"'
                  ".-.-.",   // '+'
                  ".----.",  // '''
                  "---...",  // ':'
                  "........" // 'HH'
                };

float cw_tick = 0.1;

PwmOut __pwm( dp24 );

void BeepOFF (void)
{
    __pwm.write(0.0);
}

void BeepON (void)
{
    __pwm.write(0.5);
}

void dot (void)
{
    BeepON();
    myled = 1;
    wait(cw_tick);
    BeepOFF();
    myled = 0;
}

void dash (void)
{
    BeepON();
    myled = 1;
    wait(cw_tick*3);
    BeepOFF();
    myled = 0;
}

void space(int k)
{
    wait(cw_tick * (float)k);
}



    BTN btn(dp13);

int main()
{
    int i;
    char* ptr;

    {
        __pwm.period(1.0/FREQ);
        __pwm.write(0.0);
    };

    btn.CMD = 0;
    while(1) {
        for (i = 0; i < 27; i++) {

            if(btn.CMD) {
                i = 0;
                btn.CMD = 0;
            }

            ptr = codes[i];
            for (; *ptr; ptr++, space(1) ) {
                switch (*ptr) {
                    case '-':
                        dash();
                        break;
                    case '.':
                        dot();
                        break;
                    case ' ':
                        space(7);
                        break;
                    default:
                        continue;
                }
            }
            space(2);

        }
    }
}