#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int greenLed = 5;
const int yellowLed = 6;
const int redLed = 7;
const float soundSpeed = 0.0342;
long getDistance(int trigPin, int echoPin) {
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void turnOnGreenLed() {
digitalWrite(greenLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, LOW);
}
void turnOnYellowLed() {
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, HIGH);
digitalWrite(redLed, LOW);
}
void turnOnRedLed() {
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, HIGH);
}
void setup() {
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
Serial.begin(9600);
Serial.println("Suprapto - TI721378");
}
void loop() {
// Mengukur jarak menggunakan sensor ultrasonik
int distance = round((getDistance(9, 10) * soundSpeed) / 2);
// Menampilkan jarak di Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Menampilkan jarak di LCD I2C
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
// Mengatur LED berdasarkan jarak
if (distance > 15) {
turnOnGreenLed();
} else if (distance >= 5 && distance <= 15) {
turnOnYellowLed();
} else {
turnOnRedLed();
}
delay(250);
}