Code Morse

Descriptif du projet

Ce projet consiste à réaliser un générateur de code Morse.

Plus précisément, à partir d'un message stocké dans une chaine de caractères (on se limite aux lettres majuscules), le programme doit générer le code Morse lumineux correspondant sur une LED.

Le code Morse des différentes lettres est constitué d'une série d’impulsions courtes (le point) et longues (le tiret). Une impulsion longue fait 3 fois la durée d'une impulsion courte et les impulsions sont séparées par un temps mort de la durée d'une impulsion courte. Entre chaque lettre il y a un temps mort de la durée de 3 impulsions courtes et entre chaque mot un temps mort de la durée de 7 impulsions courtes.

Le montage électronique associé à ce projet est très simple : une LED pilotée par la borne numérique n°2 de la plateforme Arduino.

Solutions pour le codage numérique du Morse

Nous n'utilisons pas ici la méthode habituelle qui consiste à conserver le code Morse de chaque caractère sous forme de chaine de caractères avec des points et des tirets, mais nous envisageons deux solutions originales pour effectuer le codage numérique du code Morse :

Au niveau du programme les codages des 26 lettres majuscules de l'alphabet figurent dans un tableau. Pour la première méthode jusqu'à 13 bits sont nécessaires pour coder une lettre, donc il faut utiliser un tableau de int :

int codeMorse[]={
	0b10111,
	0b111010101,
	0b11101011101,
	...
};

L'utilisation du préfixe 0b permet de saisir directement dans le code source les nombres en binaire sans les convertir au préalable en base 10.

Pour la seconde méthode, deux tableaux sont nécessaires : un tableau pour le code Morse proprement dit et un tableau dans lequel figurent les nombres d'impulsions. Chaque donnée de ces tableaux peut être codée sur moins de 8 bits ce qui donne la possibilité d'utiliser des tableaux de byte :

byte nbImpulsion[]={2,4,4,3, ...};
byte codeMorse[]={
	0b01,
	0b1000,
	0b1010,
	0b100,
	...
};

Il est intéressant de remarquer que dans les deux méthodes l'occupation en mémoire est strictement la même.

Dans la première méthode il y a un tableau de $26\times 16=416$ bits soit 52 octets.

Dans la deuxième méthode il y a deux tableaux de $26\times 8=208$ bits soit 26 octets, donc au total $2\times 26=52$ octets.