/*
Il sistema dovrà prendere in ingresso un messaggio tramite seriale, quindi replicarlo in codice morse tramite un led.
Sono accettati caratteri dalla a alla z e numeri.
*/
#define LEDPIN 8
#define DOTLENGHT 100
#define DASHLENGHT 300
#define LETTERPAUSE 300
#define WORDPAUSE 600
String mapCharToMorse[26] = {"12","2111","2121","211","1","1121","221","1111","11","1222","212","1211","22","21","222","1221","2212","121","111","2","112","1112","122","2112","2122","2211"};
String mapIntToMorse[10] = {"12222","11222","11122","11112","11111","21111","22111","22211","22221","22222"};
void dot() {
digitalWrite(LEDPIN, HIGH);
delay(DOTLENGHT);
digitalWrite(LEDPIN, LOW);
delay(LETTERPAUSE);
}
void dash() {
digitalWrite(LEDPIN, HIGH);
delay(DASHLENGHT);
digitalWrite(LEDPIN, LOW);
delay(LETTERPAUSE);
}
void setup() {
Serial.begin(9600);
pinMode(LEDPIN, OUTPUT);
}
void loop() {
Serial.println("Enter message: ");
while (Serial.available() == 0) {} //wait for data available
String text = Serial.readString();
Serial.print("Stringa letta: ");
Serial.println(text);
for(char& c : text) {
if(int(c) == 32){
delay(WORDPAUSE);
continue;
}
if(isalpha(c)) {
if(isUpperCase(c))
c += 32;
for(char& morseValue : mapCharToMorse[int(c) - 97]) {
switch (morseValue) {
case '1': // in caso di punto
dot();
break;
case '2': // in caso di trattino
dash();
break;
default:
break; }
}
} else {
for(char& morseValue : mapIntToMorse[int(c) - 48]) {
switch (morseValue) {
case '1':
dot();
break;
case '2':
dash();
break;
default:
break; }
}
}
}
}