Code source version 1 du code Morse

Retour à la page du projet

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 :

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(){
}