#include <Wire.h>
//liblary lcd tambahkan di liblary manager terlebih dahulu
#include <LiquidCrystal_I2C.h>
//definisi untu rgbled
#define RedLED 13
#define GreenLED 14
#define BlueLED 12
//definisi untuk buzzer
#define Buzzer 19
//definisi untuk ultrasonik
#define TRIG 16
#define ECHO 17
//definisi untuk lcd
#define SDA 2
#define SCL 4
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
//pin mide untuk mengatur keluaran led
pinMode(RedLED, OUTPUT);
pinMode(GreenLED, OUTPUT);
pinMode(BlueLED, OUTPUT);
//pin mode untuk mengatur keluaran buzzer(klakson)
pinMode(Buzzer, OUTPUT);
//pin mode untuk mengatur ultrasonic
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
//set untuk mengatur lcd
// SDA di pin 2 dan SCL di pin 4
Wire.begin(2, 4);
lcd.begin(20, 4);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sindi Adelia Mamonto");
delay(2000);
lcd.clear();
}
//untuk mengukur jarak ketembok
long getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
long distance = getDistance();//mengambil jarak getdistance
//menampilkan jarak di lcd
lcd.setCursor(0,0);//baris pertama di lcd
lcd.print("Sindi Adelia Mamonto");
lcd.setCursor(0, 1);//baris kedua di lcd
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm");
//pengaturan led dan buzzer
if(distance > 200){
digitalWrite(GreenLED, HIGH);
digitalWrite(BlueLED, LOW);
digitalWrite(RedLED, LOW);
digitalWrite(Buzzer, LOW);
//untuk menampilkan di wokwi
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
Serial.println("Status: LED Hijau menyala (Aman), Buzzer mati");
lcd.setCursor(0, 2);//baris ke 3 di lcd
lcd.print("Aman ");
} else if (distance <= 200 && distance > 50) {
// Jarak antara 100 cm dan 200 cm (biru berkedip, buzzer berbunyi delay 3 detik)
digitalWrite(GreenLED, LOW);
digitalWrite(BlueLED, HIGH);
delay(1000);//led biru menyala selama 1 detik
digitalWrite(BlueLED, LOW);
delay(1000);//led biru mati selama 1 detik
digitalWrite(RedLED, LOW);
// Buzzer menyala-mati dengan delay 1 detik
digitalWrite(Buzzer, HIGH);
delay(1000);
digitalWrite(Buzzer, LOW);
delay(1000);
//untuk menampilkan di wokwi
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
Serial.println("Status: LED Biru berkedip (Dekat), Buzzer menyala sebentar");
lcd.setCursor(0, 2);//baris ke 3 lcd
lcd.print("Dekat Dinding "); // Pesan peringatan
} else if (distance <= 50) {
// Jarak kurang dari 50 cm (merah menyala, buzzer berbunyi terus)
digitalWrite(GreenLED, LOW);
digitalWrite(BlueLED, LOW);
digitalWrite(RedLED, HIGH);
// Buzzer terus berbunyi
digitalWrite(Buzzer, HIGH);
// untuk menampilkan di wokwi
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
Serial.println("Status: LED Merah menyala (Sangat Dekat!), Buzzer berbunyi terus");
lcd.setCursor(0, 2);
lcd.print("Sangat Dekat! "); // Pesan bahaya
}
delay(10); // this speeds up the simulation
}