int ledB = 19;
int ledM = 18;
int ledK = 5;
int PIRstatus = 0;
#define ECHO_PIN 2
#define TRIG_PIN 4
#define buzzer 32
#define PIR_PIN 23
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
Servo servo1;
Servo servo2;
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2); //Alamat I2C
void setup() {
Serial.begin(9600);
lcd.init (); //Mulai LCD
lcd.setBacklight(HIGH); //Nyalakan backlight
pinMode(ledB, OUTPUT);
pinMode(ledM, OUTPUT);
pinMode(ledK, OUTPUT);
pinMode(buzzer, OUTPUT);
servo1.attach(27);
servo2.attach(12);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
// put your main code here, to run repeatedly:
PIRstatus = digitalRead(PIR_PIN);
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
Serial.print("Jarak: ");
Serial.println(distance);
if (distance > 0 && distance <101)
{
digitalWrite(ledB, HIGH);
digitalWrite(ledM, HIGH);
digitalWrite(ledK, HIGH);
tone(buzzer, 1000);
delay(300);
noTone(buzzer);
tone(buzzer, 800);
delay(100);
noTone(buzzer);
servo1.write(90);
servo2.write(90);
lcd.setCursor(3,0);
lcd.print("EMERGENCY"); //Tampilan pada layar LCD
lcd.setCursor(5,1);
lcd.print("CALLS"); //Tampilan pada layar LCD
if (PIRstatus == HIGH){
Serial.println("Gerakan Terdeteksi");
}
else{
Serial.println("Tidak ada gerakan");
}
}
else if (distance > 100 && distance <151)
{
digitalWrite(ledB, HIGH);
digitalWrite(ledM, HIGH);
digitalWrite(ledK, LOW);
tone(buzzer, 600);
delay(300);
noTone(buzzer);
tone(buzzer, 400);
delay(100);
noTone(buzzer);
servo1.write(180);
servo2.write(0);
lcd.setCursor(3,0);
lcd.print("EMERGENCY"); //Tampilan pada layar LCD
lcd.setCursor(5,1);
lcd.print("CALLS"); //Tampilan pada layar LCD
if (PIRstatus == HIGH){
Serial.println("Gerakan Terdeteksi");
}
else{
Serial.println("Tidak ada gerakan");
}
}
else if (distance > 150 && distance <201)
{
digitalWrite(ledB, HIGH);
digitalWrite(ledM, LOW);
digitalWrite(ledK, LOW);
tone(buzzer, 300);
delay(300);
noTone(buzzer);
tone(buzzer, 250);
delay(100);
noTone(buzzer);
servo1.write(180);
servo2.write(0);
lcd.setCursor(3,0);
lcd.print("EMERGENCY"); //Tampilan pada layar LCD
lcd.setCursor(5,1);
lcd.print("CALLS"); //Tampilan pada layar LCD
if (PIRstatus == HIGH){
Serial.println("Gerakan Terdeteksi");
}
else{
Serial.println("Tidak ada gerakan");
}
}
else if (distance > 200)
{
digitalWrite(ledB, LOW);
digitalWrite(ledM, LOW);
digitalWrite(ledK, LOW);
noTone(buzzer);
servo1.write(180);
servo2.write(0);
lcd.clear();
if (PIRstatus == HIGH){
Serial.println("Gerakan Terdeteksi");
}
else{
Serial.println("Tidak ada gerakan");
}
}
}