Un ejemplo muy habitual para realizar un primer proyecto con Arduino es la creación de una máquina Morse para mandar mensajes secretos con un LED basándonos en el código Morse. Este ejemplo, quizás sea algo sencillo para realizar, pero para ponernos a prueba vamos a realizar un ejercicio que no es tan común o evidente de resolver, que es el decodificador Morse (Morse Decoder).

Para el decodificador Morse se requiere de un sensor de luz que es el que usaremos para interpretar los destellos de luz en las letras que contiene el mensaje. Para el montaje de este proyecto, utilizaremos el siguiente diagrama que es muy sencillo y dentro de una caja dispondremos de un Led y un sensor de luz LDR enfrentados. Podemos utilizar la misma placa para crear el mensaje y decodificarlo o podemos hacerlo con otra placa a parte.

Para ello, vamos a establecer una estrategia al inicio de nuestro programa y proceder a realizar este tutorial.

Observemos la tabla de letras y números en Morse…  Nuestra misión es crear un modelo en el que esta serie de puntos y rayas puedan ser interpretadas por una placa programable. Y qué mejor que los números para ello.

Lo que vamos a desarrollar es un programa capaz de diferenciar la lectura de un punto o una raya, y a cada señal, iremos sumando un valor numérico. Si nos fijamos bien, las letras que tienen solo un símbolo son 2 letras la E y la T. Las letras con dos símbolos son cuatro, la A, la I, la M y la N. Si seguimos elaborando , tendremos 8 letras más con 3 símbolos, ya que estamos utilizando un sistema en base 2. Así que vamos a asociar el número en función de la posición del símbolo, y en función del símbolo; dándole al punto el valor de 0 y a la raya el valor de 1.

Para la E obtendríamos el 0; ya que está compuesto por un punto, para la T, obtendríamos el 1; ya que está compuesto por una raya. Para la I obtendríamos otra vez cero, ya que está compuesto por dos puntos, pero como ahora son dos símbolos, habremos de sumar el total acumulado de los anteriores; por lo que se convierte en 0 +2 = 2 y así suesivamente.

Si aplicamos este esquema de funcionamiento podemos realizar la siguiente fórmula para interpretar los datos.

 

(1)   \begin{equation*} Morse_value = symbol*2^{npos} + 2^{npos-1} \end{equation*}

 

 

 

 

Nos quedaría un esquema como el de la siguiente imagen.

 

En este sentido, la mejor manera de integrar todos estos símbolos ascociados a un número es crrear una lista de elementos ordenados o Array. Desde Ardublockly, se puede crear desde el mismo apartado y añadiendo items de uno en uno, podemos crear toda esta lista de caracteres para operar con ella.

Como podremos ver, todos los índices no están completos, así que lo sustituiremos por un 0 o por otro carácter que podamos identificar como no válido.

 

 

Codificador Morse

Para hacer un codificador Morse, es decir; que realice la acción de convertir una letra en rayas y puntos vamos a desarrollar las siguientes funciones. La función raya y la función punto. A estas dos funciones les asociaremos una duración que es la que nos ayudará a diferenciar cuánto ha de durar el punto con respecto a la raya para que el posterior programa decodificador funcione. Para ello, vamos a introducir una función que realice

Para realizar las funciones raya y punto, solamente tendremos que llamar a esta función con el intervalo del destello que caracteriza cada uno. Así que vamos a usar dos variables para guardar la variable de tiempo de la raya ( 700 milisegundos ) y el punto ( 400 milisegundos).

Decodificador Morse

Vamos a crear dos funciones encargadas de medir los tiempos de encendido y apagado de un LED a través del sensor de luz. Estas funciones retornan un valor que es el tiempo de diferencia entre un estado y otro.

Para medir el tiempo que permanece apagado el LED, puede ser debida a la pausa entre un destello y otro o puede producirse porque se haya acabado el mensaje y comience el cómputo de una letra nueva. De esta manera vamos a definir una variable denominada gap, en el que se actualiza su tiempo que permanece apagado y si supera este valor, deberíamos salir del bucle.

 

Para esta fórmula vamos a aplicar una acción recursiva. En este caso queremos realizar la suma de las potencias de 2 hasta llegar a cero. Es decir que de una función el resultado que obtendremos será el resultado de la misma función con un parámetro cambiado. A este ejemplo se le llama función recursiva y tiene grandes ventajas sobre las funciones iterativas.

Es importante reconocer que tendremos que disponer de una acción de parada. Para ello utilizaremos la acción return. Esta acción hará que nuestra función recursiva se termine y obtengamos el valor final de todo este proceso.

 

Un modelo de programación también puede ser seguir la estructura de un árbol, como el siguiente.