#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, 16 kolom x 2 baris
#define trigPin 7
#define echoPin 8
#define greenLED 12
#define yellowLED 11
#define redLED 10
void setup() {
Serial.begin(9600);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
}
void loop() {
long duration;
float distance_cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance_cm = (float)duration * 0.034 / 1.99; // Menghitung jarak
lcd.clear(); // Bersihkan layar
if (duration == 0) {
lcd.print("Tidak ada objek");
Serial.println("Tidak ada objek");
} else if (distance_cm > 15) {
lcd.print("Jarak: ");
lcd.print(distance_cm, 2); // Menampilkan hanya 2 angka di belakang koma
lcd.print(" cm");
Serial.print("Jarak: ");
Serial.print(distance_cm);
Serial.println(" cm");
digitalWrite(greenLED, HIGH); // Lampu hijau menyala
digitalWrite(yellowLED, LOW); // Lampu kuning mati
digitalWrite(redLED, LOW); // Lampu merah mati
} else if (distance_cm >= 5 && distance_cm <= 15) {
lcd.print("Jarak: ");
lcd.print(distance_cm, 2);
lcd.print(" cm");
Serial.print("Jarak: ");
Serial.print(distance_cm);
Serial.println(" cm");
digitalWrite(greenLED, LOW); // Lampu hijau mati
digitalWrite(yellowLED, HIGH); // Lampu kuning menyala
digitalWrite(redLED, LOW); // Lampu merah mati
} else {
lcd.print("Jarak: ");
lcd.print(distance_cm, 2);
lcd.print(" cm");
Serial.print("Jarak: ");
Serial.print(distance_cm);
Serial.println(" cm");
digitalWrite(greenLED, LOW); // Lampu hijau mati
digitalWrite(yellowLED, LOW); // Lampu kuning mati
digitalWrite(redLED, HIGH); // Lampu merah menyala
}
delay(500); // Tunggu sebentar sebelum mengukur lagi
}