Codificador texto a morse.
Usando un LED para la señal morse. El led mas sencillo de usar es el incorporado en el Arduino.
Tareas por realizar:
- usar un tono en un parlante o buzzer/zumbador.
- usar un laser para transmitir la señal a distancias con linea de vista
- usar un transmisor inalámbrico para transmitir la señal
- Probar con un Xbee
- analizar la secuencia de datos con un modelo de Cadena de Markov
/* CODificador morse * recibe un mensaje * equivale: estructura de datos char y string * funciones: codificar y decodificar */ // 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 ); } void loop(){ String mensaje = "SOS "; String mensajemorse; char simbolo; int n; mensajemorse = codifica(mensaje); // Transmite el mensaje n = mensajemorse.length(); for(int i=0; i<=n; i++){ simbolo = mensajemorse[i]; morseLedTx(simbolo); } } void morseLedTx(char simbolo){ if (simbolo == '.'){ digitalWrite( PIN_LED, HIGH ); delay( DURACION ); digitalWrite( PIN_LED, LOW ); delay( DURACION ); } if (simbolo == '-'){ digitalWrite( PIN_LED, HIGH ); delay( DURACION*3 ); digitalWrite( PIN_LED, LOW ); delay( DURACION ); } if (simbolo == ' ') { delay( DURACION ); } } // 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 codifica(String mensaje){ String mensajemorse = ""; int i, j, n, m; bool encontre; n = mensaje.length(); m = (sizeof equivale / sizeof *equivale); for( i = 0; i<n; i++ ){ encontre = 0; j=0; while(j<m and encontre==0){ if(toupper(mensaje[i]) == equivale[j].letra){ mensajemorse += equivale[j].codigo; encontre=1; } j++; } mensajemorse += " "; //separador de caracteres } return mensajemorse; }