.:: Arduino Morse Code ::.
Arduino project for decoding Morse code



This is an Arduino program that decodes Morse code from an I/O pin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | void setup() { Serial.begin(9600); pinMode(2, INPUT); } void loop() { long endOfBufferTime = 1000; // button off delay in ms for end of letter long datDelay = 500; // if button pressed more than this number in ms then a dash not a dot String buff = ""; while(1 == 1) { // wait till 1 long cnt2 = 0; while( digitalRead(2) == 0) { cnt2++; delay(1); // measure blank delay... if over thresh then output buffer if ((cnt2 > endOfBufferTime) & (buff.length() > 0)) { //Serial.print(buff += "\n"); if (buff == ".-") {Serial.print("\nA\n"); buff = ""; } if (buff == "-...") {Serial.print("\nB\n"); buff = ""; } if (buff == "-.-.") {Serial.print("\nC\n"); buff = ""; } if (buff == "-..") {Serial.print("\nD\n"); buff = ""; } if (buff == ".") {Serial.print("\nE\n"); buff = ""; } if (buff == "..-.") {Serial.print("\nF\n"); buff = ""; } if (buff == "--.") {Serial.print("\nG\n"); buff = ""; } if (buff == "....") {Serial.print("\nH\n"); buff = ""; } if (buff == "..") {Serial.print("\nI\n"); buff = ""; } if (buff == ".---") {Serial.print("\nJ\n"); buff = ""; } if (buff == "-.-") {Serial.print("\nK\n"); buff = ""; } if (buff == ".-..") {Serial.print("\nL\n"); buff = ""; } if (buff == "--") {Serial.print("\nM\n"); buff = ""; } if (buff == "-.") {Serial.print("\nN\n"); buff = ""; } if (buff == "---") {Serial.print("\nO\n"); buff = ""; } if (buff == ".--.") {Serial.print("\nP\n"); buff = ""; } if (buff == "--.-") {Serial.print("\nQ\n"); buff = ""; } if (buff == ".-.") {Serial.print("\nR\n"); buff = ""; } if (buff == "...") {Serial.print("\nS\n"); buff = ""; } if (buff == "-") {Serial.print("\nT\n"); buff = ""; } if (buff == "..-") {Serial.print("\nU\n"); buff = ""; } if (buff == "...-") {Serial.print("\nV\n"); buff = ""; } if (buff == ".--") {Serial.print("\nW\n"); buff = ""; } if (buff == "-..-") {Serial.print("\nX\n"); buff = ""; } if (buff == "-.--") {Serial.print("\nY\n"); buff = ""; } if (buff == "--..") {Serial.print("\nZ\n"); buff = ""; } if (buff == ".----") {Serial.print("\n1\n"); buff = ""; } if (buff == "..---") {Serial.print("\n2\n"); buff = ""; } if (buff == "...--") {Serial.print("\n3\n"); buff = ""; } if (buff == "....-") {Serial.print("\n4\n"); buff = ""; } if (buff == ".....") {Serial.print("\n5\n"); buff = ""; } if (buff == "-....") {Serial.print("\n6\n"); buff = ""; } if (buff == "--...") {Serial.print("\n7\n"); buff = ""; } if (buff == "---..") {Serial.print("\n8\n"); buff = ""; } if (buff == "----.") {Serial.print("\n9\n"); buff = ""; } if (buff == "-----") {Serial.print("\n0\n"); buff = ""; } } } // measure 1 long cnt1 = 0; while( digitalRead(2) == 1) { cnt1++; delay(1); } //judge dit or dat int res = 0; if (cnt1 < datDelay) { res = 0; } else { res = 1; } //output if (res == 0) { Serial.print("."); buff += "."; } if (res == 1) { Serial.print("-"); buff += "-"; } } } |
With Arduino LCD / Button Sheild (letter at a time)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { pinMode(2, INPUT); } void clear_lcd() { lcd.setCursor(0,1);lcd.print(" "); } void loop() { long endOfBufferTime = 1000; // button off delay in ms for end of letter long datDelay = 500; // if button pressed more than this number in ms then a dash not a dot String buff = ""; clear_lcd(); lcd.setCursor(0,1);lcd.print("SLAVA MORSE SOS"); delay(3000); clear_lcd(); lcd.setCursor(0,1);lcd.print("READY... "); delay(500); while(1 == 1) { // wait till 1 long cnt2 = 0; while(!((analogRead(0) > 500) and (analogRead(0)< 1000))) { cnt2++; delay(1); // measure blank delay... if over thresh then output buffer if ((cnt2 > endOfBufferTime) & (buff.length() > 0)) { //Serial.print(buff += "\n"); if (buff == ".-") {clear_lcd();lcd.setCursor(0,1);lcd.print("A "); buff = ""; } if (buff == "-...") {clear_lcd();lcd.setCursor(0,1);lcd.print("B "); buff = ""; } if (buff == "-.-.") {clear_lcd();lcd.setCursor(0,1);lcd.print("C "); buff = ""; } if (buff == "-..") {clear_lcd();lcd.setCursor(0,1);lcd.print("D "); buff = ""; } if (buff == ".") {clear_lcd();lcd.setCursor(0,1);lcd.print("E "); buff = ""; } if (buff == "..-.") {clear_lcd();lcd.setCursor(0,1);lcd.print("F "); buff = ""; } if (buff == "--.") {clear_lcd();lcd.setCursor(0,1);lcd.print("G "); buff = ""; } if (buff == "....") {clear_lcd();lcd.setCursor(0,1);lcd.print("H "); buff = ""; } if (buff == "..") {clear_lcd();lcd.setCursor(0,1);lcd.print("I "); buff = ""; } if (buff == ".---") {clear_lcd();lcd.setCursor(0,1);lcd.print("J "); buff = ""; } if (buff == "-.-") {clear_lcd();lcd.setCursor(0,1);lcd.print("K "); buff = ""; } if (buff == ".-..") {clear_lcd();lcd.setCursor(0,1);lcd.print("L "); buff = ""; } if (buff == "--") {clear_lcd();lcd.setCursor(0,1);lcd.print("M "); buff = ""; } if (buff == "-..") {clear_lcd();lcd.setCursor(0,1);lcd.print("N "); buff = ""; } if (buff == "---") {clear_lcd();lcd.setCursor(0,1);lcd.print("O "); buff = ""; } if (buff == ".--.") {clear_lcd();lcd.setCursor(0,1);lcd.print("P "); buff = ""; } if (buff == "--.-") {clear_lcd();lcd.setCursor(0,1);lcd.print("Q "); buff = ""; } if (buff == ".-.") {clear_lcd();lcd.setCursor(0,1);lcd.print("R "); buff = ""; } if (buff == "...") {clear_lcd();lcd.setCursor(0,1);lcd.print("S "); buff = ""; } if (buff == "-") {clear_lcd();lcd.setCursor(0,1);lcd.print("T "); buff = ""; } if (buff == "..-") {clear_lcd();lcd.setCursor(0,1);lcd.print("U "); buff = ""; } if (buff == "...-") {clear_lcd();lcd.setCursor(0,1);lcd.print("V "); buff = ""; } if (buff == ".--") {clear_lcd();lcd.setCursor(0,1);lcd.print("W "); buff = ""; } if (buff == "-..-") {clear_lcd();lcd.setCursor(0,1);lcd.print("X "); buff = ""; } if (buff == "-.--") {clear_lcd();lcd.setCursor(0,1);lcd.print("Y "); buff = ""; } if (buff == "--..") {clear_lcd();lcd.setCursor(0,1);lcd.print("Z "); buff = ""; } if (buff == ".----") {clear_lcd();lcd.setCursor(0,1);lcd.print("1 "); buff = ""; } if (buff == "..---") {clear_lcd();lcd.setCursor(0,1);lcd.print("2 "); buff = ""; } if (buff == "...--") {clear_lcd();lcd.setCursor(0,1);lcd.print("3 "); buff = ""; } if (buff == "....-") {clear_lcd();lcd.setCursor(0,1);lcd.print("4 "); buff = ""; } if (buff == ".....") {clear_lcd();lcd.setCursor(0,1);lcd.print("5 "); buff = ""; } if (buff == "-....") {clear_lcd();lcd.setCursor(0,1);lcd.print("6 "); buff = ""; } if (buff == "--...") {clear_lcd();lcd.setCursor(0,1);lcd.print("7 "); buff = ""; } if (buff == "---..") {clear_lcd();lcd.setCursor(0,1);lcd.print("8 "); buff = ""; } if (buff == "----.") {clear_lcd();lcd.setCursor(0,1);lcd.print("9 "); buff = ""; } if (buff == "-----") {clear_lcd();lcd.setCursor(0,1);lcd.print("0 "); buff = ""; } } } // measure 1 long cnt1 = 0; while((analogRead(0) > 500) and (analogRead(0)< 1000)) { cnt1++; delay(1); } //judge dit or dat int res = 0; if (cnt1 < datDelay) { res = 0; } else { res = 1; } //output if (res == 0) { lcd.print("."); buff += "."; } if (res == 1) { lcd.print("-"); buff += "-"; } } } |
With Arduino LCD / Button Sheild (entire word)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { pinMode(2, INPUT); } void clear_lcd() { lcd.setCursor(0,1);lcd.print(" "); } void loop() { long endOfBufferTime = 1000; // button off delay in ms for end of letter long datDelay = 500; // if button pressed more than this number in ms then a dash not a dot String buff = ""; clear_lcd(); lcd.setCursor(0,1);lcd.print("SLAVA MORSE SOS"); delay(3000); clear_lcd(); lcd.setCursor(0,1);lcd.print("> "); delay(3000); while(1 == 1) { // wait till 1 long cnt2 = 0; while(!((analogRead(0) > 500) and (analogRead(0)< 1000))) { cnt2++; delay(1); // measure blank delay... if over thresh then output buffer if ((cnt2 > endOfBufferTime) & (buff.length() > 0)) { //Serial.print(buff += "\n"); if (buff == ".-") {lcd.print("A"); buff = ""; } if (buff == "-...") {lcd.print("B"); buff = ""; } if (buff == "-.-.") {lcd.print("C"); buff = ""; } if (buff == "-..") {lcd.print("D"); buff = ""; } if (buff == ".") {lcd.print("E"); buff = ""; } if (buff == "..-.") {lcd.print("F"); buff = ""; } if (buff == "--.") {lcd.print("G"); buff = ""; } if (buff == "....") {lcd.print("H"); buff = ""; } if (buff == "..") {lcd.print("I"); buff = ""; } if (buff == ".---") {lcd.print("J"); buff = ""; } if (buff == "-.-") {lcd.print("K"); buff = ""; } if (buff == ".-..") {lcd.print("L"); buff = ""; } if (buff == "--") {lcd.print("M"); buff = ""; } if (buff == "-..") {lcd.print("N"); buff = ""; } if (buff == "---") {lcd.print("O"); buff = ""; } if (buff == ".--.") {lcd.print("P"); buff = ""; } if (buff == "--.-") {lcd.print("Q"); buff = ""; } if (buff == ".-.") {lcd.print("R"); buff = ""; } if (buff == "...") {lcd.print("S"); buff = ""; } if (buff == "-") {lcd.print("T"); buff = ""; } if (buff == "..-") {lcd.print("U"); buff = ""; } if (buff == "...-") {lcd.print("V"); buff = ""; } if (buff == ".--") {lcd.print("W"); buff = ""; } if (buff == "-..-") {lcd.print("X"); buff = ""; } if (buff == "-.--") {lcd.print("Y"); buff = ""; } if (buff == "--..") {lcd.print("Z"); buff = ""; } if (buff == ".----") {lcd.print("1"); buff = ""; } if (buff == "..---") {lcd.print("2"); buff = ""; } if (buff == "...--") {lcd.print("3"); buff = ""; } if (buff == "....-") {lcd.print("4"); buff = ""; } if (buff == ".....") {lcd.print("5"); buff = ""; } if (buff == "-....") {lcd.print("6"); buff = ""; } if (buff == "--...") {lcd.print("7"); buff = ""; } if (buff == "---..") {lcd.print("8"); buff = ""; } if (buff == "----.") {lcd.print("9"); buff = ""; } if (buff == "-----") {lcd.print("0"); buff = ""; } } } // measure 1 long cnt1 = 0; while((analogRead(0) > 500) and (analogRead(0)< 1000)) { cnt1++; delay(1); } //judge dit or dat int res = 0; if (cnt1 < datDelay) { res = 0; } else { res = 1; } //output if (res == 0) { //lcd.print("."); buff += "."; } if (res == 1) { //lcd.print("-"); buff += "-"; } } } |