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;
}