ArduinoPlayground/sketches/arduino-mega-2560/sos_blink/sos_blink.ino

45 lines
937 B
C++

// SOS in Morse code on the Arduino Mega 2560 built-in LED.
// S = ... O = --- S = ...
constexpr unsigned long UNIT_MS = 200;
void blinkSymbol(unsigned long onUnits) {
digitalWrite(LED_BUILTIN, HIGH);
delay(onUnits * UNIT_MS);
digitalWrite(LED_BUILTIN, LOW);
// Every Morse symbol is followed by a one-unit gap.
delay(UNIT_MS);
}
void blinkLetter(const char *pattern) {
for (const char *symbol = pattern; *symbol != '\0'; ++symbol) {
blinkSymbol(*symbol == '.' ? 1 : 3);
}
}
void letterGap() {
// blinkSymbol() already supplied the first of the three gap units.
delay(2 * UNIT_MS);
}
void wordGap() {
// blinkSymbol() already supplied the first of the seven gap units.
delay(6 * UNIT_MS);
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
blinkLetter("...");
letterGap();
blinkLetter("---");
letterGap();
blinkLetter("...");
wordGap();
}