Sends "HELLO WORLD" out in Morse code on LED1

Dependencies:   mbed

Committer:
K7ESU
Date:
Thu Oct 07 20:59:36 2010 +0000
Revision:
0:c1136e029881
My first mbed program

Who changed what in which revision?

UserRevisionLine numberNew 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