typestar

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

  1. CODE[26] mapea letras a strings de punto y raya, indexado con - 'A'.
  2. flash cronometra un símbolo; los huecos siguen la regla 1-3-7.
  3. sendLetter recorre el string de símbolos char por char.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.

← Anterior