Rick Halterman
/
morse
Sends "HELLO WORLD" out in Morse code on LED1
main.cpp@0:c1136e029881, 2010-10-07 (annotated)
- Committer:
- K7ESU
- Date:
- Thu Oct 07 20:59:36 2010 +0000
- Revision:
- 0:c1136e029881
My first mbed program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
K7ESU | 0:c1136e029881 | 1 | |
K7ESU | 0:c1136e029881 | 2 | |
K7ESU | 0:c1136e029881 | 3 | // My first code for the mbed. |
K7ESU | 0:c1136e029881 | 4 | // Blinks "HELLO WORLD" out in Morse Code on LED1 |
K7ESU | 0:c1136e029881 | 5 | // Repeats forever |
K7ESU | 0:c1136e029881 | 6 | // |
K7ESU | 0:c1136e029881 | 7 | |
K7ESU | 0:c1136e029881 | 8 | |
K7ESU | 0:c1136e029881 | 9 | #include "mbed.h" |
K7ESU | 0:c1136e029881 | 10 | |
K7ESU | 0:c1136e029881 | 11 | #define WAIT_time 0.20 // about 5 wpm |
K7ESU | 0:c1136e029881 | 12 | #define D() wait(WAIT_time) |
K7ESU | 0:c1136e029881 | 13 | |
K7ESU | 0:c1136e029881 | 14 | DigitalOut myled1(LED1); |
K7ESU | 0:c1136e029881 | 15 | |
K7ESU | 0:c1136e029881 | 16 | |
K7ESU | 0:c1136e029881 | 17 | void send_dah(); |
K7ESU | 0:c1136e029881 | 18 | void send_dit(); |
K7ESU | 0:c1136e029881 | 19 | void send_space(); |
K7ESU | 0:c1136e029881 | 20 | void send_morse(char); |
K7ESU | 0:c1136e029881 | 21 | void blink_out(char *ptr); |
K7ESU | 0:c1136e029881 | 22 | |
K7ESU | 0:c1136e029881 | 23 | |
K7ESU | 0:c1136e029881 | 24 | char temp1; |
K7ESU | 0:c1136e029881 | 25 | char rotate_char; |
K7ESU | 0:c1136e029881 | 26 | char loops; |
K7ESU | 0:c1136e029881 | 27 | char morse; |
K7ESU | 0:c1136e029881 | 28 | |
K7ESU | 0:c1136e029881 | 29 | |
K7ESU | 0:c1136e029881 | 30 | |
K7ESU | 0:c1136e029881 | 31 | // Offset 0x2C for ASCII to Morse code character pattern conversion |
K7ESU | 0:c1136e029881 | 32 | // 0xFF means it is not a valid Morse code character |
K7ESU | 0:c1136e029881 | 33 | |
K7ESU | 0:c1136e029881 | 34 | // Characters are packed this way: Bits are rotated right until a "1". After that, "1" is a Dah, "0" is a Dit. |
K7ESU | 0:c1136e029881 | 35 | // So, pad the LSBits with "0"s until the 8 bits represent a valid Morse Code charater. |
K7ESU | 0:c1136e029881 | 36 | char mcode[100]= |
K7ESU | 0:c1136e029881 | 37 | { |
K7ESU | 0:c1136e029881 | 38 | 0xCE,0xFF,0xAA,0xFF, |
K7ESU | 0:c1136e029881 | 39 | 0xFC,0xF4,0xE4,0xC4,0x84,0x04,0x0C,0x1C,0x3C,0x7C, |
K7ESU | 0:c1136e029881 | 40 | 0xFF,0xFF,0xFF,0xFF,0xFF,0x32,0xFF, |
K7ESU | 0:c1136e029881 | 41 | |
K7ESU | 0:c1136e029881 | 42 | 0xA0,0x18,0x58,0x30,0x40,0x48,0x70,0x08,0x20,0xE8, |
K7ESU | 0:c1136e029881 | 43 | 0xB0,0x28,0xE0,0x60,0xF0,0x68,0xB1,0x50,0x10,0xC0, |
K7ESU | 0:c1136e029881 | 44 | 0x90,0x81,0xD0,0x91,0xD8,0x31, |
K7ESU | 0:c1136e029881 | 45 | |
K7ESU | 0:c1136e029881 | 46 | 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, |
K7ESU | 0:c1136e029881 | 47 | |
K7ESU | 0:c1136e029881 | 48 | 0xA0,0x18,0x58,0x30,0x40,0x48,0x70,0x08,0x20,0xE8, |
K7ESU | 0:c1136e029881 | 49 | 0xB0,0x28,0xE0,0x60,0xF0,0x68,0xB1,0x50,0x10,0xC0, |
K7ESU | 0:c1136e029881 | 50 | 0x90,0x81,0xD0,0x91,0xD8,0x31, |
K7ESU | 0:c1136e029881 | 51 | }; |
K7ESU | 0:c1136e029881 | 52 | |
K7ESU | 0:c1136e029881 | 53 | |
K7ESU | 0:c1136e029881 | 54 | |
K7ESU | 0:c1136e029881 | 55 | int main() { |
K7ESU | 0:c1136e029881 | 56 | |
K7ESU | 0:c1136e029881 | 57 | myled1 = 0; |
K7ESU | 0:c1136e029881 | 58 | |
K7ESU | 0:c1136e029881 | 59 | while(1) { |
K7ESU | 0:c1136e029881 | 60 | blink_out("HELLO WORLD"); |
K7ESU | 0:c1136e029881 | 61 | send_space(); |
K7ESU | 0:c1136e029881 | 62 | |
K7ESU | 0:c1136e029881 | 63 | } |
K7ESU | 0:c1136e029881 | 64 | |
K7ESU | 0:c1136e029881 | 65 | } |
K7ESU | 0:c1136e029881 | 66 | |
K7ESU | 0:c1136e029881 | 67 | |
K7ESU | 0:c1136e029881 | 68 | void send_morse(char morse) { |
K7ESU | 0:c1136e029881 | 69 | |
K7ESU | 0:c1136e029881 | 70 | rotate_char = 0x01; // set up mask bit |
K7ESU | 0:c1136e029881 | 71 | loops = 0x00; |
K7ESU | 0:c1136e029881 | 72 | do { |
K7ESU | 0:c1136e029881 | 73 | rotate_char <<= 1; |
K7ESU | 0:c1136e029881 | 74 | loops++; |
K7ESU | 0:c1136e029881 | 75 | }while ((morse & rotate_char) == 0); |
K7ESU | 0:c1136e029881 | 76 | |
K7ESU | 0:c1136e029881 | 77 | rotate_char <<= 1; |
K7ESU | 0:c1136e029881 | 78 | loops++; |
K7ESU | 0:c1136e029881 | 79 | |
K7ESU | 0:c1136e029881 | 80 | do { |
K7ESU | 0:c1136e029881 | 81 | if ((morse & rotate_char) == 0) // if it is a zero, send a dit |
K7ESU | 0:c1136e029881 | 82 | send_dit(); |
K7ESU | 0:c1136e029881 | 83 | |
K7ESU | 0:c1136e029881 | 84 | else |
K7ESU | 0:c1136e029881 | 85 | send_dah(); |
K7ESU | 0:c1136e029881 | 86 | |
K7ESU | 0:c1136e029881 | 87 | rotate_char <<= 1; |
K7ESU | 0:c1136e029881 | 88 | loops++; |
K7ESU | 0:c1136e029881 | 89 | |
K7ESU | 0:c1136e029881 | 90 | }while(loops < 8); // there are 8 bits |
K7ESU | 0:c1136e029881 | 91 | |
K7ESU | 0:c1136e029881 | 92 | } |
K7ESU | 0:c1136e029881 | 93 | |
K7ESU | 0:c1136e029881 | 94 | |
K7ESU | 0:c1136e029881 | 95 | |
K7ESU | 0:c1136e029881 | 96 | void send_dit() { // dit is on one unit, off one unit |
K7ESU | 0:c1136e029881 | 97 | |
K7ESU | 0:c1136e029881 | 98 | myled1 = 1; |
K7ESU | 0:c1136e029881 | 99 | D(); |
K7ESU | 0:c1136e029881 | 100 | myled1 = 0; |
K7ESU | 0:c1136e029881 | 101 | D(); |
K7ESU | 0:c1136e029881 | 102 | |
K7ESU | 0:c1136e029881 | 103 | } |
K7ESU | 0:c1136e029881 | 104 | |
K7ESU | 0:c1136e029881 | 105 | |
K7ESU | 0:c1136e029881 | 106 | void send_dah() { // dah is on 2 units, off 1 unit |
K7ESU | 0:c1136e029881 | 107 | |
K7ESU | 0:c1136e029881 | 108 | myled1 = 1; |
K7ESU | 0:c1136e029881 | 109 | D(); |
K7ESU | 0:c1136e029881 | 110 | D(); |
K7ESU | 0:c1136e029881 | 111 | myled1 = 0; |
K7ESU | 0:c1136e029881 | 112 | D(); |
K7ESU | 0:c1136e029881 | 113 | |
K7ESU | 0:c1136e029881 | 114 | |
K7ESU | 0:c1136e029881 | 115 | } |
K7ESU | 0:c1136e029881 | 116 | |
K7ESU | 0:c1136e029881 | 117 | void send_space() { // space between words is 7 units |
K7ESU | 0:c1136e029881 | 118 | |
K7ESU | 0:c1136e029881 | 119 | D(); |
K7ESU | 0:c1136e029881 | 120 | D(); |
K7ESU | 0:c1136e029881 | 121 | D(); |
K7ESU | 0:c1136e029881 | 122 | D(); |
K7ESU | 0:c1136e029881 | 123 | D(); |
K7ESU | 0:c1136e029881 | 124 | D(); |
K7ESU | 0:c1136e029881 | 125 | D(); |
K7ESU | 0:c1136e029881 | 126 | |
K7ESU | 0:c1136e029881 | 127 | } |
K7ESU | 0:c1136e029881 | 128 | |
K7ESU | 0:c1136e029881 | 129 | |
K7ESU | 0:c1136e029881 | 130 | void blink_out(char *ptr) { |
K7ESU | 0:c1136e029881 | 131 | |
K7ESU | 0:c1136e029881 | 132 | while (*ptr) |
K7ESU | 0:c1136e029881 | 133 | {temp1 = *ptr++; |
K7ESU | 0:c1136e029881 | 134 | |
K7ESU | 0:c1136e029881 | 135 | if (temp1 == 0x20) |
K7ESU | 0:c1136e029881 | 136 | {send_space(); |
K7ESU | 0:c1136e029881 | 137 | temp1 = *ptr++; |
K7ESU | 0:c1136e029881 | 138 | }; |
K7ESU | 0:c1136e029881 | 139 | |
K7ESU | 0:c1136e029881 | 140 | temp1-= 0x2C; |
K7ESU | 0:c1136e029881 | 141 | morse = mcode[temp1]; |
K7ESU | 0:c1136e029881 | 142 | send_morse(morse); |
K7ESU | 0:c1136e029881 | 143 | D(); // 2 unit space |
K7ESU | 0:c1136e029881 | 144 | D(); |
K7ESU | 0:c1136e029881 | 145 | } |
K7ESU | 0:c1136e029881 | 146 | } |
K7ESU | 0:c1136e029881 | 147 | |
K7ESU | 0:c1136e029881 | 148 | |
K7ESU | 0:c1136e029881 | 149 |