const int LED_PIN = 0; const int BUTTON_PIN = 1; // Morse timing (milliseconds) const int DOT = 200; const int DASH = DOT * 3; const int INTRA_GAP = DOT; // between dots/dashes const int LETTER_GAP = DOT * 3; // between letters const int WORD_GAP = DOT * 7; // between words void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { if (digitalRead(BUTTON_PIN) == LOW) { flashSTAY(); while (digitalRead(BUTTON_PIN) == LOW) { delay(10); } } } // ---------- Morse primitives ---------- void flashDot() { digitalWrite(LED_PIN, HIGH); delay(DOT); digitalWrite(LED_PIN, LOW); delay(INTRA_GAP); } void flashDash() { digitalWrite(LED_PIN, HIGH); delay(DASH); digitalWrite(LED_PIN, LOW); delay(INTRA_GAP); } void letterGap() { delay(LETTER_GAP - INTRA_GAP); } void wordGap() { delay(WORD_GAP - INTRA_GAP); } // ---------- Letters ---------- void S() { flashDot(); flashDot(); flashDot(); letterGap(); } void T() { flashDash(); letterGap(); } void A() { flashDot(); flashDash(); letterGap(); } void Y() { flashDash(); flashDot(); flashDash(); flashDash(); letterGap(); } // ---------- Message ---------- void flashSTAY() { S(); T(); A(); Y(); delay(WORD_GAP); // pause after message }