const int buttonPin = 14; // Pin untuk tombol
const int ledPin = 27; // Pin untuk LED
// Variabel global
unsigned long buttonPressTime = 0;
bool buttonPressed = false;
// Morse code mappings
const char *morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
void setup() {
pinMode(ledPin, OUTPUT); // Mengatur pin LED sebagai output
pinMode(buttonPin, INPUT); // Mengatur pin tombol sebagai input
digitalWrite(ledPin, LOW); // Matikan LED awalnya
Serial.begin(9600); // Mulai komunikasi serial
}
void loop() {
// Membaca status tombol
bool buttonState = digitalRead(buttonPin);
// Jika tombol ditekan
if (buttonState == HIGH && !buttonPressed) {
buttonPressed = true;
buttonPressTime = millis();
}
// Jika tombol dilepas
if (buttonState == LOW && buttonPressed) {
buttonPressed = false;
unsigned long pressDuration = millis() - buttonPressTime;
if (pressDuration < 500) { // Tombol ditekan singkat
MorseCode(".");
} else { // Tombol ditekan lama
MorseCode("-");
}
}
// Menunggu 1 detik setelah satu karakter selesai diinputkan
if (millis() - buttonPressTime > 1000 && buttonPressed) {
buttonPressed = false;
MorseCode(" ");
}
}
void MorseCode(const char* code) {
for (int i = 0; code[i] != '\0'; i++) {
if (code[i] == '.') {
digitalWrite(ledPin, HIGH); // LED menyala
delay(250); // Waktu titik
digitalWrite(ledPin, LOW); // LED mati
delay(250); // Jeda antar-titik
} else if (code[i] == '-') {
digitalWrite(ledPin, HIGH); // LED menyala
delay(750); // Waktu garis
digitalWrite(ledPin, LOW); // LED mati
delay(250); // Jeda antar-garis
} else if (code[i] == ' ') {
delay(1000); // Jeda antar-karakter
}
}
}