le programme donné par le prof n’est pas tout à fait à jour, il faut maintenant rajouter const
devant les chaines de caractères statiques.
le programme fonctionne, vous tapez SOS dans la console série (attention d’enlever l’envoi de CR/LF) et ils vous affiche (très très lentement car l’unité de temps est assez longue et il fait aussi du son et de la lumière)
[color=blue]... --- ... [/color]
(bon pour être précis le code morse international définit SOS comme un seul symbole donc on devrait vraiment afficher [color=red]...---... [/color]
sans les espaces
donc si vous êtes un peu ambitieux dans le travail, allez regarder la spec complète des Codes spéciaux morse)
ce que vous demande votre prof c’est de faire la même chose mais à l’envers - vous rentrez [color=blue]... --- ... [/color]
et il doit vous afficher SOS
donc le principe est sensiblement le même sauf qu’au lieu de lire un seul caractère et de le traduire en morse, il faut détecter une séquence complète de . et de - (qui se termine donc par un espace ou un retour chariot CR ou CR/LF) et trouver le caractère correspondant (ie en ASCII l’index du tableau + ‘0’ sauf pour les caractères spéciaux sans représentation). Deux séparateurs de suite (espace, CR, LF, tab, …) marqueront une séparation de mot.
je vous suggère de pratiquer un peu votre anglais et d’aller voir sur le forum comment bien gérer le port série. vous y trouverez toutes vos réponses
voilà le code de votre prof modifié pour ne pas avoir les warning à la compilation dans les dernières version du compilateur (et la console à 115200 bauds) - ça vous fait une base saine pour démarrer (bon à moins de vouloir jouer le morse sur la LED et le haut parleur, il n’y a pas grand chose à conserver si ce n’est le grand tableau de code morse) 
int led = 13; // LED connected to digital pin 13
int buzzer = 12; // buzzer connected to digital pin 12
int unit = 50; // duration of a pulse
const char * morsecode[] = {
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----.", // 9
"---...", // :
"-.-.-.", // ;
"", // < (there's no morse for this simbol)
"-...-", // =
"", // > (there's no morse for this simbol)
"..--..", // ?
".--._.", // @
".-", // 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
};
void setup() {
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(115200);
}
void say_morse_word(const char * msg) {
int index = 0;
while (msg[index] != '\0') {
// say a dash
if (msg[index] == '-') {
dash();
}
// say a dot
if (msg[index] == '.') {
dot();
}
// gap beetween simbols
intragap();
index++;
}
}
// beep
void beep(int time) {
int i;
int t = 100; // period of the wav. bigger means lower pitch.
int beepduration = (int)((float)time / t * 1800);
digitalWrite(led, HIGH);
for (i = 0; i < beepduration; i++) {
digitalWrite(buzzer, HIGH);
delayMicroseconds(t);
digitalWrite(buzzer, LOW);
delayMicroseconds(t);
}
delay(time);
}
// silence
void silence(int time) {
digitalWrite(led, LOW);
delay(time);
}
// general procedure for .
void dot() {
beep(unit);
}
// general procedure for -
void dash() {
beep(unit * 3);
}
// gap between dots and dashes
void intragap() {
silence(unit);
}
// gap between letters
void shortgap() {
silence(3 * unit);
}
// gap be tween words
void mediumgap() {
silence(7 * unit);
}
void say_char(char letter) {
if ((letter >= '0') && (letter <= 'Z') && (letter != '<') && (letter != '>')) {
Serial.print(morsecode[letter - '0']);
Serial.print(' ');
say_morse_word(morsecode[letter - '0']);
shortgap();
} else {
if (letter == ' ') {
Serial.print(" \\ ");
mediumgap();
} else {
Serial.print("X");
}
}
}
void loop() {
if (Serial.available()) {
say_char((char)Serial.read());
}
}