Bonjour,
Je suis professeur de STI2D SIN, et je travaille en ce moment sur un TP, dans lequel mes élèves devront entrer une chaîne de caractère en morse via le moniteur série et il devra en ressortir la traduction dans le moniteur série en caractères alphanumériques.
Sauf que j'ai bien avancé dans mon code, mais j'ai pu faire un programme qui traduit les caractères alphanumériques en morse mais je n'arrive pas a faire l'inverse.
Pourriez vous m'aider, et si possible en reprenant ma présentation ?
Merci d'avance,
Didier
/*
********************************************************************
* NOM : morse.ino *
* TYPE : APPLICATION *
* SUJET : Traduire le code morse en caratère alphanumérique *
* AUTEUR : *
* VERSION : 1.0 *
* CREATION : 2016 *
* FABRICATION : arduino *
********************************************************************
*/
#include <stdio.h>
/*
************************************************************************
* CONSTANTES *
************************************************************************
*/
#define MAX_ENTREE 39
#define MAX_MORSE 8
#define BLANC ' '
#define CAR_DEFAUT '?'
#define IDEM 0
#define FAUX 1
#define EOM '@'
/*
************************************************************************
* PROTOTYPES *
************************************************************************
*/
void setup();
void loop();
//int Compare(char[],char[][MAX_MORSE],int);
void LireCodeMorse(char []);
char DecoderCodeMorse(char []);
void AfficherCode(char);
/*
************************************************************************
* initialisation de la liaison série *
* Paramètre en E/S : aucun *
* paramètres : aucun *
* retour : sans *
************************************************************************
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while (!Serial) {
// wait for serial port to connect.
}
Serial.println("\nfin setup \n");
}
/*
************************************************************************
* PROGRAMME PRINCIPAL *
* Paramètre en E/S : aucun *
************************************************************************
*/
void loop()
{
char MorseClair;
char CodeMorse[MAX_MORSE];
Serial.println("debut programme principal\n");
LireCodeMorse(CodeMorse); //Appel de la fonction LireCodeMorse avec commme paramètre CodeMorse
MorseClair=DecoderCodeMorse(CodeMorse); //Affectation de MorseClair a la fonction DecoderCodeMorse
AfficherCode(MorseClair); //Affichage de MorseCla
while (MorseClair=EOM); //Tant que MorseClair = EOM, ne rien fair
// traduction algorithme en C du programme principal ICI
Serial.println("\t\t** fin du texte - programme principal terminé **");
// do nothing while true:
while (true);
}
/*
************************************************************************
* Nom : LireCodeMorse *
* Description : Lit le code morse et le range dans un tableau *
* Paramètre en sortie : Tableau de caractères *
* Nom de la sortie : CodeMorse[] *
************************************************************************
*/
void AfficherCode(char morseAlpha)
{
if(morseAlpha != EOM) {
Serial.print(" traduction : ");
Serial.println(morseAlpha);
}
}
/*
************************************************************************
* Nom : LireCodeMorse *
* Description : Lit le code morse et le range dans un tableau *
* Paramètre en sortie : Tableau de caractères *
* Nom de la sortie : CodeMorse[] *
************************************************************************
*/
void LireCodeMorse(char CodeMorse[])
{
int iCpt = 0, jCpt;
char Car;
do
{
int indice = 0;
Car =Serial.read();
if (Car =='.' || Car== '-' || Car == ' ')
{
CodeMorse[indice++]=Car;
}
}
while ((Car != BLANC)&&(iCpt<MAX_MORSE-1));
// complement avec des caractères blancs pour comparaison
for(jCpt = iCpt ; jCpt < MAX_MORSE ; jCpt++)
CodeMorse[jCpt] = BLANC;
}
/*
************************************************************************
* Nom : DecoderCodeMorse *
* Description : Traduit le morse en caractére ASCII *
* Paramétre en entrée : Tableau de caractères *
* Retour : Caractère *
* Nom de l'entrée : tabEntreeDecoder[] *
************************************************************************
*/
char DecoderCodeMorse(char tabEntreeDecoder[])
{
int iCpt=0, iComp;
char CarDecoder;
char TABMORSE[MAX_ENTREE][MAX_MORSE]={{'.','-',' ',' ',' ',' ',' ',' '},
{'-','.','.','.',' ',' ',' ',' '},{'-','.','-','.',' ',' ',' ',' '},
{'-','.','.',' ',' ',' ',' ',' '},{'.',' ',' ',' ',' ',' ',' ',' '},
{'.','.','-','.',' ',' ',' ',' '},{'-','-','.',' ',' ',' ',' ',' '},
{'.','.','.','.',' ',' ',' ',' '},{'.','.',' ',' ',' ',' ',' ',' '},
{'.','-','-','-',' ',' ',' ',' '},{'-','.','-',' ',' ',' ',' ',' '},
{'.','-','.','.',' ',' ',' ',' '},{'-','-',' ',' ',' ',' ',' ',' '},
{'-','.',' ',' ',' ',' ',' ',' '},{'-','-','-',' ',' ',' ',' ',' '},
{'.','-','-','.',' ',' ',' ',' '},{'-','-','.','-',' ',' ',' ',' '},
{'.','-','.',' ',' ',' ',' ',' '},{'.','.','.',' ',' ',' ',' ',' '},
{'-',' ',' ',' ',' ',' ',' ',' '},{'.','.','-',' ',' ',' ',' ',' '},
{'.','.','.','-',' ',' ',' ',' '},{'.','-','-',' ',' ',' ',' ',' '},
{'-','.','.','-',' ',' ',' ',' '},{'-','.','-','-',' ',' ',' ',' '},
{'-','-','.','.',' ',' ',' ',' '},{' ',' ',' ',' ',' ',' ',' ',' '},
{'.','-','.','-','.',' ',' ',' '},{'.','-','.','-','.','-',' ',' '},
{'-','-','-','-','-',' ',' ',' '},{'.','-','-','-','-',' ',' ',' '},
{'.','.','-','-','-',' ',' ',' '},{'.','.','.','-','-',' ',' ',' '},
{'.','.','.','.','-',' ',' ',' '},{'.','.','.','.','.',' ',' ',' '},
{'-','.','.','.','.',' ',' ',' '},{'-','-','.','.','.',' ',' ',' '},
{'-','-','-','.','.',' ',' ',' '},{'-','-','-','-','.',' ',' ',' '}};
char TABCLAIR[MAX_ENTREE]={'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',' ',EOM,'.','0',
'1','2','3','4','5','6','7','8','9'};
// EOM = .-.-. code morse de fin de saisie
do
{
Compare();
// appel ici de la fonction compare
}
while(iComp != IDEM && iCpt < MAX_ENTREE);
if(iComp == IDEM) CarDecoder = TABCLAIR[iCpt-1];
else CarDecoder = CAR_DEFAUT;
return( CarDecoder );
}
/*
************************************************************************
* Nom : Compare *
* Description : Compare deux tableaux de caractères *
* Paramétre en entrée : Tableaux de caractères,entier *
* Retour : entier *
* Nom des entrées : tabEntree[],tabCode[][MAX_MORSE],iVal *
************************************************************************
*/
boolean Compare(char tabEntree[],char tabCode[][MAX_MORSE], int iVal)
{
int i;
boolean retour;
retour = true;
for(i=0;i<MAX_MORSE;i++)
{
if (tabEntree[i]!= tabCode[iVal][i])
{
return(false);
}
Serial.write(retour);
return(true);
}
}