#define MAX_MORSE_LENGTH 6 // Maximum Morse code length per letter
#include <Arduino.h>
// Morse code dictionary
struct MorseMapping {
const char* code;
char letter;
};
const MorseMapping morseTable[] = {
{".-", 'A'}, {"-...", 'B'}, {"-.-.", 'C'}, {"-..", 'D'}, {".", 'E'},
{"..-.", 'F'}, {"--.", 'G'}, {"....", 'H'}, {"..", 'I'}, {".---", 'J'},
{"-.-", 'K'}, {".-..", 'L'}, {"--", 'M'}, {"-.", 'N'}, {"---", 'O'},
{".--.", 'P'}, {"--.-", 'Q'}, {".-.", 'R'}, {"...", 'S'}, {"-", 'T'},
{"..-", 'U'}, {"...-", 'V'}, {".--", 'W'}, {"-..-", 'X'}, {"-.--", 'Y'},
{"--..", 'Z'}, {"-----", '0'}, {".----", '1'}, {"..---", '2'}, {"...--", '3'},
{"....-", '4'}, {".....", '5'}, {"-....", '6'}, {"--...", '7'}, {"---..", '8'},
{"----.", '9'}
};
const int MORSE_TABLE_SIZE = sizeof(morseTable) / sizeof(MorseMapping);
void setup() {
Serial.begin(9600);
Serial.println("Morse Code Decoder Ready!");
Serial.println("Use dot: '.', dash: '-', space between letters, '/' between words.");
}
void loop() {
if (Serial.available()) {
String morseInput = Serial.readStringUntil('\n'); // Read input until newline
morseInput.trim(); // Remove spaces at the beginning/end
// Live feedback of what the user entered
Serial.println("Morse Input: " + morseInput);
// Decode and display output
String translatedText = decodeMorseSentence(morseInput);
Serial.println("Decoded Text: " + translatedText);
}
}
// Function to decode a full Morse sentence
String decodeMorseSentence(String morseSentence) {
String currentMorse = "";
String decodedText = "";
for (int i = 0; i < morseSentence.length(); i++) {
char c = morseSentence[i];
if (c == '.' || c == '-') {
currentMorse += c; // Build Morse character
}
else if (c == ' ') {
if (currentMorse.length() > 0) {
decodedText += decodeMorse(currentMorse); // Convert Morse to letter
currentMorse = ""; // Reset Morse buffer
}
}
else if (c == '/') {
decodedText += " "; // Add space for word separation
}
else {
Serial.print("⚠️ Invalid Character Ignored: ");
Serial.println(c);
}
}
// Decode last letter if there’s no trailing space
if (currentMorse.length() > 0) {
decodedText += decodeMorse(currentMorse);
}
return decodedText;
}
// Function to convert a Morse sequence to a letter
char decodeMorse(String morseCode) {
for (int i = 0; i < MORSE_TABLE_SIZE; i++) {
if (morseCode.equals(morseTable[i].code)) {
return morseTable[i].letter;
}
}
Serial.print("❌ Unknown Morse Code: ");
Serial.println(morseCode);
return '?'; // Unknown Morse sequence
}