#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIG_PIN 9 // Pin trigger sensor ultrasonik
#define ECHO_PIN 10 // Pin echo sensor ultrasonik
#define BUZZER_PIN 8 // Pin untuk buzzer/alarm
// Pin untuk 3 LED
#define LED1_PIN 2
#define LED2_PIN 3
#define LED3_PIN 4
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C untuk LCD 16x2
void setup() {
Serial.begin(9600); // Mulai komunikasi serial
pinMode(TRIG_PIN, OUTPUT); // Set pin trig sebagai output
pinMode(ECHO_PIN, INPUT); // Set pin echo sebagai input
pinMode(BUZZER_PIN, OUTPUT); // Set pin buzzer sebagai output
// Set pin LED sebagai output
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
}
void loop() {
long duration, distance;
// Mengatur trig pin ke LOW selama 2 mikrodetik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// Mengatur trig pin ke HIGH selama 10 mikrodetik
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mengukur waktu yang diperlukan sinyal dari dipancarkan hingga diterima kembali
duration = pulseIn(ECHO_PIN, HIGH); // pulseIn: mengukur waktu sinyal
// Menghitung jarak dalam cm
distance = (duration / 2) * 0.0343; // duration/2: waktu dibagi 2 karena sinyal pergi-pulang
// Menampilkan hasil jarak di serial monitor
Serial.print("Jarak ke permukaan air: ");
Serial.print(distance);
Serial.println(" cm");
// Menampilkan hasil jarak di LCD
lcd.clear(); // Bersihkan layar LCD
lcd.setCursor(0, 0); // Set cursor ke baris pertama
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm");
// Logika untuk Buzzer
if (distance < 8) { // Jika jarak kurang dari 8 cm
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
lcd.setCursor(0, 1); // Set cursor ke baris kedua
lcd.print("Status: DANGER!!");
} else {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
lcd.setCursor(0, 1); // Set cursor ke baris kedua
lcd.print("Status: NORMAL");
}
// Logika untuk LED
if (distance < 10) {
digitalWrite(LED1_PIN, HIGH); // LED1 menyala
digitalWrite(LED2_PIN, LOW); // LED2 mati
digitalWrite(LED3_PIN, LOW); // LED3 mati
} else if (distance < 20) {
digitalWrite(LED1_PIN, HIGH); // LED1 menyala
digitalWrite(LED2_PIN, HIGH); // LED2 menyala
digitalWrite(LED3_PIN, LOW); // LED3 mati
} else if (distance < 30) {
digitalWrite(LED1_PIN, HIGH); // LED1 menyala
digitalWrite(LED2_PIN, HIGH); // LED2 menyala
digitalWrite(LED3_PIN, HIGH); // LED3 menyala
} else {
digitalWrite(LED1_PIN, LOW); // LED1 mati
digitalWrite(LED2_PIN, LOW); // LED2 mati
digitalWrite(LED3_PIN, LOW); // LED3 mati
}
delay(1000); // Tunggu 1 detik sebelum pengukuran berikutnya
}