morse_beacon.ino en Arduino
Parpadea un mensaje en Morse desde una tabla A-Z.
// Blink a message in Morse from a lookup table, letter by letter.
const int BEACON_PIN = LED_BUILTIN;
const int UNIT_MS = 120;
const char MESSAGE[] = "SOS HELP";
// A-Z as dot-dash strings; index by letter minus 'A'.
const char* CODE[26] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
"..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..",
};
void flash(unsigned long onMs) {
digitalWrite(BEACON_PIN, HIGH);
delay(onMs);
digitalWrite(BEACON_PIN, LOW);
delay(UNIT_MS); // gap between symbols
}
void sendLetter(char letter) {
if (letter == ' ') {
delay(UNIT_MS * 7); // word gap
return;
}
const char* symbols = CODE[letter - 'A'];
for (int i = 0; symbols[i] != '\0'; i++) {
flash(symbols[i] == '.' ? UNIT_MS : UNIT_MS * 3);
}
delay(UNIT_MS * 3); // letter gap
}
void setup() {
pinMode(BEACON_PIN, OUTPUT);
}
void loop() {
for (int i = 0; MESSAGE[i] != '\0'; i++) {
sendLetter(MESSAGE[i]);
}
delay(UNIT_MS * 14);
}
Cómo funciona
CODE[26]mapea letras a strings de punto y raya, indexado con- 'A'.flashcronometra un símbolo; los huecos siguen la regla 1-3-7.sendLetterrecorre el string de símbolos char por char.
Palabras clave y builtins usados aquí
HIGHLED_BUILTINLOWOUTPUTcharconstforifintlongloopreturnsetupunsignedvoid
El intento, en números
- Líneas
- 43
- Caracteres a escribir
- 1009
- Tokens
- 322
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 322 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.