// Definisikan pin ESP32
const int buttonPin = 13; // Pin tombol push button
const int ledPin = 2; // Pin LED
// Definisikan durasi untuk menentukan apakah tombol ditekan singkat atau lama
const unsigned long shortPressDuration = 200; // Durasi untuk menandai tombol ditekan singkat (dalam milidetik)
const unsigned long longPressDuration = 500; // Durasi untuk menandai tombol ditekan lama (dalam milidetik)
const unsigned long characterTimeout = 1000; // Timeout untuk menandai akhir karakter (dalam milidetik)
// Variabel untuk menyimpan waktu tombol ditekan
unsigned long buttonPressedTime = 0;
// Variabel untuk menentukan apakah karakter baru telah dimulai
bool newCharacter = true;
// Morse Code Alphabet
const char* morseAlphabet[] = {
".-", // 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
};
// Fungsi untuk menyalakan LED sesuai dengan kode Morse
void flashMorse(const char* morseCode) {
for (int i = 0; morseCode[i] != '\0'; i++) {
digitalWrite(ledPin, HIGH);
if (morseCode[i] == '.') {
delay(250); // Durasi untuk titik
} else if (morseCode[i] == '-') {
delay(2000); // Durasi untuk garis
}
digitalWrite(ledPin, LOW);
delay(250); // Waktu antara titik/garis
}
}
// Fungsi untuk mengonversi huruf menjadi kode Morse
const char* getMorseCode(char c) {
if (c >= 'A' && c <= 'Z') {
return morseAlphabet[c - 'A'];
}
return "";
}
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Set pin tombol sebagai input dengan pull-up resistor
pinMode(ledPin, OUTPUT); // Set pin LED sebagai output
digitalWrite(ledPin, LOW); // Matikan LED secara default
Serial.begin(9600); // Inisialisasi Serial untuk debugging
}
void loop() {
// Baca status tombol
int buttonState = digitalRead(buttonPin);
// Tombol ditekan
if (buttonState == LOW) {
if (newCharacter) {
// Mulai karakter baru
newCharacter = false;
//Serial.println("New Character Started");
}
// Catat waktu tombol ditekan
if (buttonPressedTime == 0) {
buttonPressedTime = millis();
}
} else {
// Tombol dilepas
if (!newCharacter) {
// Hitung durasi tombol ditekan
unsigned long buttonReleaseTime = millis();
unsigned long pressDuration = buttonReleaseTime - buttonPressedTime;
// Reset timer untuk tombol ditekan
buttonPressedTime = 0;
// Tentukan apakah tombol ditekan singkat atau lama
if (pressDuration < shortPressDuration) {
Serial.print(".");
flashMorse(".");
} else {
Serial.print("-");
flashMorse("-");
}
}
// Reset karakter baru setelah tombol dilepas
newCharacter = true;
}
// Tunggu hingga batas waktu untuk menandai akhir karakter
if (!newCharacter && (millis() - buttonPressedTime > characterTimeout)) {
// Tombol tidak ditekan selama satu detik, akhiri karakter
Serial.println("End of Character");
newCharacter = true;
}
}