// Time Unit Definitions
const int DOT = 1000;
const int DASH = DOT * 3;
const int SYMBOL_SPACE = DOT;
const int LETTER_SPACE = DOT * 3;
const int SEGMENT_DELAY = 3000;
int ledPins[5] = {2, 3, 4, 5, 6}; // LEDs for Morse symbols
const int BUZZER_PIN = 7; // Pin for buzzer
// Morse Code Table
String morseTable[36] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", // A-J
"-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", // K-T
"..-", "...-", ".--", "-..-", "-.--", "--..", // U-Z
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", // 0-7
"---..", "----." // 8-9
};
// Function Prototypes
void displayMorse(String message);
void blinkMorseChar(char c);
void blinkLEDs(String pattern);
void blinkSymbol(char symbol, int ledIndex);
char caesarShift(char c, int shift);
void setup() {
// Initialize LEDs and buzzer
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// Original segments
String segments[] = {"208", "MFA", "MSM", "YDS"};
// Display Original Morse Code
for (int i = 0; i < 4; i++) {
displayMorse(segments[i]);
if (i < 3) delay(SEGMENT_DELAY);
}
delay(3000); // Delay before encrypted Morse
// Encrypted version
for (int i = 0; i < 4; i++) {
String encrypted = "";
for (int j = 0; j < segments[i].length(); j++) {
encrypted += caesarShift(segments[i][j], 1);
}
displayMorse(encrypted);
if (i < 3) delay(SEGMENT_DELAY);
}
delay(5000);
}
// Display Morse Code for message
void displayMorse(String message) {
for (int i = 0; i < message.length(); i++) {
blinkMorseChar(message[i]);
delay(LETTER_SPACE); // Delay between characters
}
}
// Convert character to Morse and blink each symbol
void blinkMorseChar(char c) {
int index;
if (c >= 'A' && c <= 'Z') {
index = c - 'A';
} else if (c >= '0' && c <= '9') {
index = 26 + (c - '0');
} else {
return;
}
String morse = morseTable[index];
blinkLEDs(morse);
}
// Blink each symbol with separate LEDs
void blinkLEDs(String pattern) {
for (int i = 0; i < pattern.length(); i++) {
if (i < 5) {
blinkSymbol(pattern[i], i); // Use different LED for each symbol
delay(SYMBOL_SPACE);
}
}
}
// Blink one LED for a symbol and play sound
void blinkSymbol(char symbol, int ledIndex) {
int duration = (symbol == '.') ? DOT : DASH;
// Turn on current LED
digitalWrite(ledPins[ledIndex], HIGH);
tone(BUZZER_PIN, 1000); // 1000Hz tone
delay(duration);
// Turn off LED and sound
digitalWrite(ledPins[ledIndex], LOW);
noTone(BUZZER_PIN);
}
// Caesar Cipher Shift
char caesarShift(char c, int shift) {
if (c >= 'A' && c <= 'Z') {
return ((c - 'A' + shift) % 26) + 'A';
} else if (c >= 'a' && c <= 'z') {
return ((c - 'a' + shift) % 26) + 'a';
} else if (c >= '0' && c <= '9') {
return ((c - '0' + shift) % 10) + '0';
}
return c;
}