a MIDI-to-Morse code application.

Dependencies:   MIDI REnc button mbed morse

Committer:
ChuckTimber
Date:
Sun Jul 13 02:23:16 2014 +0000
Revision:
3:993b88218184
Parent:
2:5fe4a1431347
Child:
4:98b4e2f46789
morse w/ switch input

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChuckTimber 0:d0ebbde59857 1 #include "mbed.h"
ChuckTimber 0:d0ebbde59857 2
ChuckTimber 3:993b88218184 3
ChuckTimber 0:d0ebbde59857 4 #define FREQ 800
ChuckTimber 0:d0ebbde59857 5 DigitalOut myled(LED1);
ChuckTimber 0:d0ebbde59857 6
ChuckTimber 3:993b88218184 7 char* codes[] = { ".-", "-...", "-.-.", "-..", ".",
ChuckTimber 0:d0ebbde59857 8 "..-.", "--.", "....", "..", ".---",
ChuckTimber 3:993b88218184 9 "-.-", ".-..", "--", "-.", "---",
ChuckTimber 0:d0ebbde59857 10 ".--.", "--.-", ".-.", "...", "-",
ChuckTimber 3:993b88218184 11 "..-", "...-", ".--", "-..-", "-.--", "--..", " "
ChuckTimber 3:993b88218184 12 };
ChuckTimber 0:d0ebbde59857 13 char* nums[] = { "-----", ".----", "..---", "...--", "....-",
ChuckTimber 3:993b88218184 14 ".....", "-....", "--...", "---..", "----."
ChuckTimber 3:993b88218184 15 };
ChuckTimber 3:993b88218184 16
ChuckTimber 3:993b88218184 17 char* marks[] = { ".-.-.-", // '.'
ChuckTimber 3:993b88218184 18 "--..--", // ','
ChuckTimber 3:993b88218184 19 "..--..", // '?'
ChuckTimber 3:993b88218184 20 "-.-.--", // '!'
ChuckTimber 3:993b88218184 21 "-....-", // '-'
ChuckTimber 3:993b88218184 22 "-..-.", // '/'
ChuckTimber 3:993b88218184 23 ".--.-.", // '@'
ChuckTimber 3:993b88218184 24 "-.--.", // '('
ChuckTimber 3:993b88218184 25 "-.--.-", // ')'
ChuckTimber 3:993b88218184 26 "-...-", // '='
ChuckTimber 3:993b88218184 27 ".-..-.", // '"'
ChuckTimber 3:993b88218184 28 ".-.-.", // '+'
ChuckTimber 3:993b88218184 29 ".----.", // '''
ChuckTimber 3:993b88218184 30 "---...", // ':'
ChuckTimber 3:993b88218184 31 "........" // 'HH'
ChuckTimber 3:993b88218184 32 };
ChuckTimber 0:d0ebbde59857 33
ChuckTimber 0:d0ebbde59857 34 float cw_tick = 0.1;
ChuckTimber 0:d0ebbde59857 35
ChuckTimber 0:d0ebbde59857 36 PwmOut __pwm( dp24 );
ChuckTimber 0:d0ebbde59857 37
ChuckTimber 0:d0ebbde59857 38 void BeepOFF (void)
ChuckTimber 0:d0ebbde59857 39 {
ChuckTimber 0:d0ebbde59857 40 __pwm.write(0.0);
ChuckTimber 0:d0ebbde59857 41 }
ChuckTimber 0:d0ebbde59857 42
ChuckTimber 0:d0ebbde59857 43 void BeepON (void)
ChuckTimber 0:d0ebbde59857 44 {
ChuckTimber 0:d0ebbde59857 45 __pwm.write(0.5);
ChuckTimber 0:d0ebbde59857 46 }
ChuckTimber 0:d0ebbde59857 47
ChuckTimber 0:d0ebbde59857 48 void dot (void)
ChuckTimber 0:d0ebbde59857 49 {
ChuckTimber 3:993b88218184 50 BeepON();
ChuckTimber 3:993b88218184 51 myled = 1;
ChuckTimber 0:d0ebbde59857 52 wait(cw_tick);
ChuckTimber 3:993b88218184 53 BeepOFF();
ChuckTimber 3:993b88218184 54 myled = 0;
ChuckTimber 0:d0ebbde59857 55 }
ChuckTimber 0:d0ebbde59857 56
ChuckTimber 0:d0ebbde59857 57 void dash (void)
ChuckTimber 0:d0ebbde59857 58 {
ChuckTimber 3:993b88218184 59 BeepON();
ChuckTimber 3:993b88218184 60 myled = 1;
ChuckTimber 0:d0ebbde59857 61 wait(cw_tick*3);
ChuckTimber 3:993b88218184 62 BeepOFF();
ChuckTimber 3:993b88218184 63 myled = 0;
ChuckTimber 0:d0ebbde59857 64 }
ChuckTimber 0:d0ebbde59857 65
ChuckTimber 2:5fe4a1431347 66 void space(int k)
ChuckTimber 2:5fe4a1431347 67 {
ChuckTimber 2:5fe4a1431347 68 wait(cw_tick * (float)k);
ChuckTimber 2:5fe4a1431347 69 }
ChuckTimber 2:5fe4a1431347 70
ChuckTimber 2:5fe4a1431347 71
ChuckTimber 3:993b88218184 72 unsigned char CMD;
ChuckTimber 3:993b88218184 73 unsigned char STAT;
ChuckTimber 3:993b88218184 74 unsigned char FIL;
ChuckTimber 3:993b88218184 75
ChuckTimber 3:993b88218184 76 DigitalIn _Pin(dp13);
ChuckTimber 3:993b88218184 77 Ticker _Tick;
ChuckTimber 3:993b88218184 78
ChuckTimber 3:993b88218184 79 void sample_btn()
ChuckTimber 0:d0ebbde59857 80 {
ChuckTimber 3:993b88218184 81 unsigned char a, b;
ChuckTimber 0:d0ebbde59857 82
ChuckTimber 3:993b88218184 83 a = _Pin;
ChuckTimber 3:993b88218184 84
ChuckTimber 3:993b88218184 85 if (a == FIL) {
ChuckTimber 3:993b88218184 86 b = STAT;
ChuckTimber 3:993b88218184 87 STAT = a;
ChuckTimber 3:993b88218184 88 b = (b ^ a) & a;
ChuckTimber 3:993b88218184 89 if (b) CMD = b;
ChuckTimber 3:993b88218184 90 }
ChuckTimber 3:993b88218184 91 FIL = a;
ChuckTimber 0:d0ebbde59857 92 }
ChuckTimber 0:d0ebbde59857 93
ChuckTimber 3:993b88218184 94 int main()
ChuckTimber 0:d0ebbde59857 95 {
ChuckTimber 0:d0ebbde59857 96 int i;
ChuckTimber 0:d0ebbde59857 97 char* ptr;
ChuckTimber 0:d0ebbde59857 98
ChuckTimber 3:993b88218184 99 _Tick.attach(&sample_btn, 0.01);
ChuckTimber 3:993b88218184 100
ChuckTimber 0:d0ebbde59857 101 {
ChuckTimber 0:d0ebbde59857 102 __pwm.period(1.0/FREQ);
ChuckTimber 0:d0ebbde59857 103 __pwm.write(0.0);
ChuckTimber 0:d0ebbde59857 104 };
ChuckTimber 0:d0ebbde59857 105
ChuckTimber 0:d0ebbde59857 106 while(1) {
ChuckTimber 3:993b88218184 107 for (i = 0; i < 27; ) {
ChuckTimber 1:d1e13b283169 108 ptr = codes[i];
ChuckTimber 2:5fe4a1431347 109
ChuckTimber 2:5fe4a1431347 110 for (; *ptr; ptr++, space(1) ) {
ChuckTimber 0:d0ebbde59857 111 switch (*ptr) {
ChuckTimber 3:993b88218184 112 case '-':
ChuckTimber 3:993b88218184 113 dash();
ChuckTimber 3:993b88218184 114 break;
ChuckTimber 3:993b88218184 115 case '.':
ChuckTimber 3:993b88218184 116 dot();
ChuckTimber 3:993b88218184 117 break;
ChuckTimber 3:993b88218184 118 case ' ':
ChuckTimber 3:993b88218184 119 space(7);
ChuckTimber 3:993b88218184 120 break;
ChuckTimber 3:993b88218184 121 default:
ChuckTimber 3:993b88218184 122 continue;
ChuckTimber 0:d0ebbde59857 123 }
ChuckTimber 0:d0ebbde59857 124 }
ChuckTimber 2:5fe4a1431347 125 space(2);
ChuckTimber 2:5fe4a1431347 126
ChuckTimber 3:993b88218184 127 if(CMD) {
ChuckTimber 3:993b88218184 128 i++;
ChuckTimber 3:993b88218184 129 CMD = 0;
ChuckTimber 3:993b88218184 130 }
ChuckTimber 0:d0ebbde59857 131 }
ChuckTimber 0:d0ebbde59857 132 }
ChuckTimber 0:d0ebbde59857 133 }