Neste programa eu identifiquei antes do setup qual eram os tempos dos dits, dahs, espaço entre dahs e dits, espaço entre letras e espaço entre palavras. Desta maneira é mais claro o que se está a trabalhar e se alguém quiser realizar código morse mais complexo é provavelmente mais fácil se se fizer isto.
Segundo as normas o dit (ponto) é considerado como a unidade de tempo no código morse e todo é realizado a partir dessa unidade de tempo. Por exemplo, um dah (traço) é igual a 3 vezes o tempo de um dit (ponto). Deste modo a única variável é o tempo de um dit, sendo que o tudo o resto deriva daí, logo pode-se experimentar diferentes valores para o dit e depois chegar-se à conclusão do qual se acha melhor. Pessoalmente achei que dar o valor de 100 milisegundos ao dit era bom , mas estejam à vontade para modificar no vosso código.
int SOS = 10;//Número do pin a que o LED vai estar associado
int dit = 100;//duração de 1 dit (AKA ponto)
int dah = 3dit;//duração de 1 dah (AKA traço)
int letterPause = 3dit;//duração da pausa entre letras
int wordPause = 7*dit;//duração da pausa entre palavras
int pause = dit;//pausa entre dits e dahs
void setup() {
pinMode(SOS, OUTPUT);
}
void loop() {
for(int x=0; x<3; x=x+1) {// Três dits
digitalWrite(SOS, HIGH);
delay(dit);
digitalWrite(SOS, LOW);
delay(pause);
}
delay(letterPause);
for(int x=0; x<3; x++) {// Três dahs
digitalWrite(SOS, HIGH);
delay(dah);
digitalWrite(SOS, LOW);
delay(pause);
}
delay(letterPause);
for(int x=0; x<3; x=x+1) {// Três dits
digitalWrite(SOS, HIGH);
delay(dit);
digitalWrite(SOS, LOW);
delay(pause);
}
delay(wordPause);
}