int ledPins[] = {2, 3, 4, 5, 6}; // LED pins
int buzzerPin = 8; // Buzzer pin
int dotTime = 700; // 1 time unit = 700 ms
int dashTime = dotTime * 3; // Dash = 3 time units
int spaceTime = dotTime * 3; // Between characters
// Morse for numbers 0-9
String morseDigits[10] = {
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "---..", "----."
};
// Morse for letters A-Z
String morseLetters[26] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
int caesarShift = 6; // Caesar cipher shift
// Function to blink a dot with sound
void blinkDot(int pin) {
digitalWrite(pin, HIGH);
tone(buzzerPin, 1000); // Play tone at 1000 Hz
delay(dotTime);
digitalWrite(pin, LOW);
noTone(buzzerPin); // Stop tone
delay(dotTime);
}
// Function to blink a dash with sound
void blinkDash(int pin) {
digitalWrite(pin, HIGH);
tone(buzzerPin, 1000);
delay(dashTime);
digitalWrite(pin, LOW);
noTone(buzzerPin);
delay(dotTime);
}
// Function to display Morse using up to 5 LEDs and buzzer
void displayMorse(String morseCode) {
for (int i = 0; i < morseCode.length() && i < 5; i++) {
if (morseCode[i] == '.') {
blinkDot(ledPins[i]);
} else if (morseCode[i] == '-') {
blinkDash(ledPins[i]);
}
}
delay(spaceTime);
}
// Caesar cipher for letters only (A-Z)
char encryptCaesar(char ch) {
if (ch >= 'A' && ch <= 'Z') {
return ((ch - 'A' + caesarShift) % 26) + 'A';
} else {
return ch;
}
}
// Function to show label, character, Morse and display it
void showMorse(const char* label, char ch, String morse) {
Serial.print(label);
Serial.println(ch);
Serial.print("Morse: ");
Serial.println(morse);
displayMorse(morse);
}
void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(buzzerPin, OUTPUT); // Initialize buzzer
Serial.println("Enter a letter (A-Z) or number (0-9):");
}
void loop() {
if (Serial.available() > 0) {
char inputChar = Serial.read();
inputChar = toupper(inputChar); // make sure it's uppercase
// NORMAL Morse Code
if (inputChar >= 'A' && inputChar <= 'Z') {
int index = inputChar - 'A';
Serial.print("\nOriginal: ");
Serial.println(inputChar);
Serial.print("Morse: ");
Serial.println(morseLetters[index]);
displayMorse(morseLetters[index]);
// ENCRYPTED Morse Code
char encrypted = encryptCaesar(inputChar);
int encryptedIndex = encrypted - 'A';
Serial.print("Caesar: ");
Serial.println(encrypted);
Serial.print("Morse: ");
Serial.println(morseLetters[encryptedIndex]);
displayMorse(morseLetters[encryptedIndex]);
} else if (inputChar >= '0' && inputChar <= '9') {
int index = inputChar - '0';
Serial.print("\nOriginal: ");
Serial.println(inputChar);
Serial.print("Morse: ");
Serial.println(morseDigits[index]);
displayMorse(morseDigits[index]);
// Numbers not encrypted in Caesar, so just repeat
Serial.print("Caesar: ");
Serial.println("(no change for numbers)");
displayMorse(morseDigits[index]);
} else {
Serial.println("Invalid input. Enter A-Z or 0-9 only.");
}
Serial.println("\nEnter next number and letter:");
}
}