decodificador de un mensaje en morse, al puerto serial
Puede visualizar el mensaje en la ventana del monitor Serial o algun programa que capture los datos.
/* DECOdificador morse * recibe un mensajemorse * equivale: estructura de datos char y string * funciones: codifica y decodifica */ // PIN para el LED, led integrado = 13 #define PIN_LED 13 //Duración de un símbolo en ms #define DURACION 250 void setup(){ pinMode( PIN_LED, OUTPUT ); digitalWrite( PIN_LED, LOW ); Serial.begin(9600); } void loop(){ String mensajemorse = ". ... .--. --- .-.. .. -- .--. ..- .-.. ... .- -. -.. --- .-.. .- ... --- -.-. .. . -.. .- -.. -.. . .-.. -.-. --- -. --- -.-. .. -- .. . -. - --- "; String mensaje; mensaje = decodifica(mensajemorse); Serial.println(mensaje); Serial.println(mensajemorse); delay(1500); } // Equivalente letra a código Morse. Estructura de datos static const struct {const char letra, *codigo;} equivale[] = { { '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', "--.." }, { ' ', " " }, //espacio entre palabras { '1', ".----" }, { '2', "..---" }, { '3', "...--" }, { '4', "....-" }, { '5', "....." }, { '6', "-...." }, { '7', "--..." }, { '8', "---.." }, { '9', "----." }, { '0', "-----" }, { '.', ".–.–.–" }, { ',', "--..--" }, { '?', "..--.." }, { '!', "-.-.--" }, { ':', "---..." }, { ';', "-.-.-." }, { '(', "-.--." }, { ')', "-.--.-" }, { '"', ".-..-." }, { '@', ".--.-." }, { '&', ".-..." }, }; String decodifica(String mensajemorse){ String simbolo, mensaje = ""; bool encontre = 0; int j ,n, m, desde, proximo,cuenta; n = mensajemorse.length(); m = sizeof equivale / sizeof *equivale; desde = 0; proximo = mensajemorse.indexOf(' ', desde); while(desde<n){ //Busca equivalente encontre = 0; simbolo = mensajemorse.substring(desde, proximo); j = 0; while(j < m && encontre==0){ if(simbolo == equivale[j].codigo){ mensaje += equivale[j].letra; encontre = 1; } j++; } desde = proximo+1; // Espacios entre palabras proximo = mensajemorse.indexOf(' ', desde); while(mensajemorse[desde] == ' ' && mensajemorse[proximo+1]== ' '){ proximo ++; } } return mensaje; }