#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 20x4 karakter
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Deklarasi pin untuk LED
const int ledPin[] = {3, 4, 5, 6, 7};
// Deklarasi pin untuk Push Button
const int buttonPin = 2;
bool buttonState = 0;
void setup() {
// Inisialisasi LED sebagai output
for (int i = 0; i < 5; i++) {
pinMode(ledPin[i], OUTPUT);
}
// Inisialisasi push button sebagai input dengan pull-up internal
pinMode(buttonPin, INPUT_PULLUP);
// Inisialisasi LCD
lcd.begin(20, 4); // Mengaktifkan LCD
lcd.backlight(); // Menyalakan lampu latar LCD
lcd.setCursor(0, 0); // Mengatur kursor ke kolom 0, baris 0
lcd.print("Tekan Tombol:"); // Menampilkan pesan pada baris 1
lcd.setCursor(0, 1); // Mengatur kursor ke kolom 0, baris 1
lcd.print("SOS Mode Ready"); // Menampilkan pesan pada baris 2
}
void loop() {
// Membaca status push button
buttonState = digitalRead(buttonPin);
// Jika tombol ditekan (status LOW karena pull-up internal)
if (buttonState == LOW) {
lcd.clear(); // Menghapus tampilan LCD
lcd.setCursor(0, 0); // Mengatur kursor ke kolom 0, baris 0
lcd.print("SOS Signal Dikirim"); // Menampilkan pesan saat SOS dikirim
// Kirim sinyal SOS (S: 3 dot, O: 3 dash, S: 3 dot)
// S = 3 kedipan cepat (dot)
for (int i = 0; i < 3; i++) {
SOS_Dot();
}
// O = 3 kedipan lambat (dash)
for (int i = 0; i < 3; i++) {
SOS_Dash();
}
// S = 3 kedipan cepat lagi (dot)
for (int i = 0; i < 3; i++) {
SOS_Dot();
}
delay(1000); // Jeda antar pengulangan SOS
}
}
// Fungsi untuk mengedipkan LED dalam waktu singkat (Dot)
void SOS_Dot() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPin[i], HIGH); // Nyalakan semua LED
}
delay(250); // Tahan nyala selama 250 ms
for (int i = 0; i < 5; i++) {
digitalWrite(ledPin[i], LOW); // Matikan semua LED
}
delay(250); // Jeda selama 250 ms sebelum kedipan berikutnya
}
// Fungsi untuk mengedipkan LED dalam waktu lebih lama (Dash)
void SOS_Dash() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPin[i], HIGH); // Nyalakan semua LED
}
delay(750); // Tahan nyala selama 750 ms
for (int i = 0; i < 5; i++) {
digitalWrite(ledPin[i], LOW); // Matikan semua LED
}
delay(250); // Jeda selama 250 ms sebelum kedipan berikutnya
}