#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD

// Inisialisasi LCD dengan alamat I2C 0x27 dan dimensi 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);

const int led1 = 5;  // LED Merah
const int led2 = 6;  // LED Kuning
const int led3 = 7;  // LED Hijau

const int trigPin = 3; // Pin terhubung ke pin Trigger dari sensor ultrasonik
const int echoPin = 4; // Pin terhubung ke pin Echo dari sensor ultrasonik

void setup() {
  Serial.begin(9600); // Inisialisasi komunikasi serial dengan kecepatan 9600 baud
  pinMode(led1, OUTPUT); // Mengatur led1 sebagai OUTPUT
  pinMode(led2, OUTPUT); // Mengatur led2 sebagai OUTPUT
  pinMode(led3, OUTPUT); // Mengatur led3 sebagai OUTPUT
  pinMode(trigPin, OUTPUT); // Mengatur trigPin sebagai OUTPUT
  pinMode(echoPin, INPUT); // Mengatur echoPin sebagai INPUT

  lcd.begin(20, 4); // Inisialisasi LCD dengan dimensi 20x4
  lcd.backlight(); // Menghidupkan lampu latar LCD
  lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama, kolom pertama
}

void loop() {
  // Mengirimkan sinyal trigger untuk memulai pengukuran jarak
  digitalWrite(trigPin, LOW); // Pastikan pin trigger LOW
  delayMicroseconds(2); // Tunggu selama 2 mikrodetik
  digitalWrite(trigPin, HIGH); // Kirim pulsa 10 mikrodetik ke pin trigger
  delayMicroseconds(10); // Tunggu selama 10 mikrodetik
  digitalWrite(trigPin, LOW); // Kembali set pin trigger ke LOW

  // Mengukur durasi pulsa pada pin echo
  long duration = pulseIn(echoPin, HIGH);
  // Menghitung jarak dalam cm (kecepatan suara adalah 343 m/s atau 0.034 cm/us)
  float distance = duration * 0.034 / 2;

  // Logika untuk menyalakan LED berdasarkan jarak yang terukur
  if (distance > 0 && distance <= 150) {
    digitalWrite(led1, HIGH);  // LED Merah menyala
    digitalWrite(led2, LOW);   // LED Kuning mati
    digitalWrite(led3, LOW);   // LED Hijau mati
  } else if (distance > 151 && distance <= 300) {
    digitalWrite(led1, LOW);   // LED Merah mati
    digitalWrite(led2, HIGH);  // LED Kuning menyala
    digitalWrite(led3, LOW);   // LED Hijau mati
  } else if (distance > 301 && distance <= 400) {
    digitalWrite(led1, LOW);   // LED Merah mati
    digitalWrite(led2, LOW);   // LED Kuning mati
    digitalWrite(led3, HIGH);  // LED Hijau menyala
  } else {
    digitalWrite(led1, LOW);   // LED Merah mati
    digitalWrite(led2, LOW);   // LED Kuning mati
    digitalWrite(led3, LOW);   // LED Hijau mati
  }

  // Menampilkan ketinggian air pada LCD
  lcd.clear(); // Membersihkan layar LCD
  lcd.setCursor(0, 0); // Mengatur kursor ke baris pertama, kolom pertama
  lcd.print("Ketinggian Air:"); // Mencetak pesan statis "Ketinggian Air:"
  lcd.setCursor(0, 1); // Mengatur kursor ke baris kedua, kolom pertama
  lcd.print(distance); // Mencetak nilai ketinggian air
  lcd.print(" cm"); // Mencetak satuan "cm"

  delay(500); // Tunggu selama 500 milidetik sebelum pengukuran berikutnya
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND