#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi Alamat I2C LCD (0x27 untuk Wokwi / standar)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi Pin Hardware
const int pinTrig = 9;
const int pinEcho = 10;
const int pinLED = 7;
const int pinBuzzer = 8;
void setup() {
Serial.begin(9600);
// Konfigurasi Input / Output
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
pinMode(pinLED, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Tampilan Awal
lcd.setCursor(0, 0);
lcd.print(" SISTEM IOT by Rafn ");
lcd.setCursor(0, 1);
lcd.print(" 4 KONDISI OK ");
delay(2000);
lcd.clear();
}
void loop() {
// 1. Memicu Sinyal Ultrasonik
digitalWrite(pinTrig, LOW);
delayMicroseconds(2);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
// 2. Membaca Durasi Pantulan (µs)
long durasi = pulseIn(pinEcho, HIGH);
// 3. Menghitung Jarak (cm)
float jarak = (durasi * 0.0343) / 2;
// Print ke Serial Monitor
Serial.print("Jarak: ");
Serial.print(jarak, 1);
Serial.println(" cm");
// 4. Update Tampilan Jarak di Baris 1 LCD
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(jarak, 1);
lcd.print(" cm "); // Spasi ekstra untuk menghapus sisa karakter angka lama
// 5. Percabangan Logika 4 Kondisi
if (jarak > 0 && jarak <= 2.0) {
// ==========================================
// KONDISI 1: DEATH (Jarak <= 2 cm)
// ==========================================
lcd.setCursor(0, 1);
lcd.print("Status: DEATH! ");
digitalWrite(pinLED, HIGH); // LED menyala penuh
tone(pinBuzzer, 3000); // Buzzer berbunyi konstan frekuensi tinggi (1500Hz)
}
else if (jarak > 0 && jarak <= 10.0) {
// ==========================================
// KONDISI 2: BAHAYA (Jarak <= 10 cm)
// ==========================================
lcd.setCursor(0, 1);
lcd.print("Status: BAHAYA! ");
digitalWrite(pinLED, HIGH); // LED menyala penuh
tone(pinBuzzer, 1500); // Buzzer berbunyi konstan frekuensi tinggi (1500Hz)
}
else if (jarak > 10.0 && jarak <= 30.0) {
// ==========================================
// KONDISI 3: WASPADA (10 cm < Jarak <= 30 cm)
// ==========================================
lcd.setCursor(0, 1);
lcd.print("Status: WASPADA ");
// Efek berkedip (Beeping) untuk peringatan sedang
digitalWrite(pinLED, HIGH);
tone(pinBuzzer, 800); // Bunyi nada sedang (800Hz)
delay(100);
digitalWrite(pinLED, LOW);
noTone(pinBuzzer);
delay(100);
}
else {
// ==========================================
// KONDISI 4: AMAN (Jarak > 30 cm)
// ==========================================
lcd.setCursor(0, 1);
lcd.print("Status: AMAN ");
digitalWrite(pinLED, LOW); // LED mati
noTone(pinBuzzer); // Buzzer mati
}
delay(150); // Intervall sampling
}