Afficher/Masquer les commentaires
La constante TEMPO
indique la vitesse en ms à laquelle les impulsions du code Morse
sont générées sur la LED.
const int TEMPO=300;
Ce tableau d'entier contient 26 éléments. Le premier élément correspond au codage de la lettre A, le second élément au codage de la lettre B, etc.
On utilise le préfixe 0b
pour entrer directement les nombres en écriture binaire.
int codeMorse[]={
0b10111,
0b111010101,
0b11101011101,
0b1110101,
0b1,
0b101011101,
0b111011101,
0b1010101,
0b101,
0b1011101110111,
0b111010111,
0b101110101,
0b1110111,
0b11101,
0b11101110111,
0b10111011101,
0b1110111010111,
0b1011101,
0b10101,
0b111,
0b1010111,
0b101010111,
0b101110111,
0b11101010111,
0b1110101110111,
0b11101110101
};
Fonction pour afficher sur la LED le code morse d'une lettre :
void afficheLettre(char lettre){
byte(lettre)
donne le code ASCII de la lettre, pour A c'est 65,
pour B c'est 66, etc. En retranchant 65 on obtient la position du codage
de la lettre dans le tableau codeMorse.
byte positionLettre=byte(lettre)-65;
codeLettre
reçoit le codage numérique du code Morse de la lettre.
byte codeLettre=codeMorse[positionLettre];
Conversion en binaire de codeLettre
, le résultat figure dans le tableau bits
.
Pour en savoir plus : Conversion d'un entier en binaire
byte bits[]={0,0,0,0,0,0,0,0,0,0,0,0,0}; //Jusqu'à 13 bits
byte r;
byte k=0;
do{
r=codeLettre%2;
bits[k]=r;
codeLettre=(codeLettre-r)/2;
k++;
}while(codeLettre!=0);
On exploite le tableau de bits pour générer la séquence d'allumage de la LED, la boucle permet de parcourir le tableau :
un bit 1 provoque l'allumage de la LED durant TEMPO
ms,
un bit 0 provoque l'extinction de la LED durant TEMPO
ms.
Les constantes LOW et HIGH habituellement utilisées avec digitalWrite
correspondent
aux valeurs 0 et 1 ce qui permet d'écrire directement digitalWrite(2,bits[i])
for(int i=k-1;i>=0;i--){
digitalWrite(2,bits[i]);
delay(TEMPO);
}
Une fois le code Morse de la lettre généré, on assure que la LED soit éteinte.
digitalWrite(2,LOW);
}
Tout se passe dans la fonction setup
qui est exécutée une fois au démarrage du module
Arduino.
void setup(){
pinMode(2,OUTPUT);
char message[]="CODE MORSE";
for(int k=0;k<10;k++){
if(message[k]==' '){
Temps mort pour représenter un espace
delay(TEMPO*7);
} else {
On utilise le fonction afficheLettre
vue ci-dessus pour afficher le code morse de chaque
lettre du message.
afficheLettre(message[k]);
Temps mort entre deux caractères.
delay(3*TEMPO);
}
}
}
Pour éviter que le code Morse ne se réalise en boucle tout le programme principal
figure dans la fonction setup
et la fonction loop
est vide
(cependant elle doit obligatoirement figurer dans le code source du programme
sinon une erreur de compilation est provoquée).
void loop(){
}