a MIDI-to-Morse code application.
Dependencies: MIDI REnc button mbed morse
main.cpp@3:993b88218184, 2014-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |