#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// pin yang terhubung ke arduino
const int trigPin = 9;
const int echoPin = 10;
const int lamp1Pin = 2;
const int lamp2Pin = 3;
const int lamp3Pin = 4;
const int lamp4Pin = 5;
void setup() {
// put your setup code here, to run once:
// Semua pin mode input atau output
lcd.begin(16, 2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(lamp1Pin, OUTPUT);
pinMode(lamp2Pin, OUTPUT);
pinMode(lamp3Pin, OUTPUT);
pinMode(lamp4Pin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// settingan jarak sensor dan durasi
long durasi, jarak;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durasi = pulseIn(echoPin, HIGH);
jarak = (durasi / 2) / 29.1;
if (jarak > 0 && jarak <= 100) {
turnOFFAllLamps();
digitalWrite(lamp1Pin, HIGH);
displayOnLCD(jarak, "Lampu 1 On");
} else if (jarak > 100 && jarak <= 200) {
turnOFFAllLamps();
digitalWrite(lamp2Pin, HIGH);
displayOnLCD(jarak, "Lampu 2 On");
} else if (jarak > 200 && jarak <= 300) {
turnOFFAllLamps();
digitalWrite(lamp3Pin, HIGH);
displayOnLCD(jarak, "Lampu 3 On");
} else if (jarak > 300 && jarak <= 400) {
turnOFFAllLamps();
digitalWrite(lamp4Pin, HIGH);
displayOnLCD(jarak, "Lampu 4 On");
} else if (jarak > 400) {
turnOFFAllLamps();
digitalWrite(lamp1Pin, HIGH);
digitalWrite(lamp2Pin, HIGH);
digitalWrite(lamp3Pin, HIGH);
digitalWrite(lamp4Pin, HIGH);
displayOnLCD(jarak, "Scanning Selesai..");
}
}
// lampu hidup semua jika jarak lebih dari 400cm dan lampu mati ketika di jarak tertentu
void turnOFFAllLamps() {
digitalWrite(lamp1Pin, LOW);
digitalWrite(lamp2Pin, LOW);
digitalWrite(lamp3Pin, LOW);
digitalWrite(lamp4Pin, LOW);
}
// display pesan lcd
void displayOnLCD(long jarak, const char* message) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(message);
delay(2000);
}