#include <Arduino.h>
#include <map>
#define BUZZER_PIN 13 // Nomor pin contoh, sesuaikan dengan setup Anda
#define LED_RED_PIN 14 // Pin untuk LED merah
#define LED_GREEN_PIN 15 // Pin untuk LED hijau
#define LED_BLUE_PIN 16 // Pin untuk LED biru
std::map<char, String> morseCodeMap = {
{'A', ".-"}, {'B', "-..."}, {'C', "-.-."}, {'D', "-.."}, {'E', "."},
{'F', "..-."}, {'G', "--."}, {'H', "...."}, {'I', ".."}, {'J', ".---"},
{'K', "-.-"}, {'L', ".-.."}, {'M', "--"}, {'N', "-."}, {'O', "---"},
{'P', ".--."}, {'Q', "--.-"}, {'R', ".-."}, {'S', "..."}, {'T', "-"},
{'U', "..-"}, {'V', "...-"}, {'W', ".--"}, {'X', "-..-"}, {'Y', "-.--"},
{'Z', "--.."}, {'0', "-----"}, {'1', ".----"}, {'2', "..---"}, {'3', "...--"},
{'4', "....-"}, {'5', "....."}, {'6', "-...."}, {'7', "--..."}, {'8', "---.."},
{'9', "----."}
};
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT);
digitalWrite(LED_RED_PIN, LOW); // Memastikan LED merah mati pada awal
digitalWrite(LED_GREEN_PIN, LOW); // Memastikan LED hijau mati pada awal
digitalWrite(LED_BLUE_PIN, LOW); // Memastikan LED hijau mati pada awal
// Serial.begin(115200); // Inisialisasi Serial Monitor
}
void loop() {
String message = "HALO";
String morseCode = convertToMorse(message);
playMorse(morseCode);
delay(8000); // Tunggu sebelum mengulang pesan Morse
}
String convertToMorse(String message) {
String morseCode = "";
for (int i = 0; i < message.length(); i++) {
char c = toupper(message[i]);
if (morseCodeMap.count(c)) {
morseCode += morseCodeMap[c] + " ";
} else if (c == ' ') {
morseCode += " "; // Tambahkan spasi ekstra untuk memisahkan kata
}
}
return morseCode;
}
void playMorse(String morseCode) {
int unitTime = 400; // Waktu dasar unit dalam ms
for (int i = 0; i < morseCode.length(); i++) {
if (morseCode[i] == '.') {
// Dot: suara pendek, nyala LED merah, dan LED hijau mati
digitalWrite(LED_GREEN_PIN, HIGH);
digitalWrite(LED_BLUE_PIN, HIGH);
digitalWrite(LED_RED_PIN, LOW);
// Serial.print(".");
tone(BUZZER_PIN, 1000, unitTime);
delay(unitTime);
digitalWrite(LED_RED_PIN, HIGH);
delay(50); // Tunggu sebentar setelah nada
} else if (morseCode[i] == '-') {
// Dash: suara panjang, nyala LED hijau, dan LED merah mati
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_BLUE_PIN, HIGH);
// Serial.print("-");
tone(BUZZER_PIN, 1000, unitTime * 3);
delay(unitTime * 3);
digitalWrite(LED_GREEN_PIN, HIGH);
delay(50); // Tunggu sebentar setelah nada
} else if (morseCode[i] == ' ') {
// Spasi: jeda antar simbol
digitalWrite(LED_BLUE_PIN, LOW);
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_GREEN_PIN, HIGH);
// Serial.print(" ");
delay(unitTime * 3);
}
// Jeda antar bagian Morse
delay(unitTime);
}
//Serial.println(); // Baris baru setelah satu huruf selesai
}