#include <Arduino.h>
#include <ESP32Servo.h>
// Definisikan pin yang digunakan
const int pirPin = 13;
const int pirLedPin = 2;
const int ultrasonicTrigPin = 26;
const int ultrasonicEchoPin = 27;
const int ultrasonicLedPin = 15;
const int servoPin = 4;
Servo myservo;
bool objectDetected = false; // Untuk melacak apakah objek terdeteksi sebelumnya
void setup() {
pinMode(pirPin, INPUT);
pinMode(pirLedPin, OUTPUT);
pinMode(ultrasonicTrigPin, OUTPUT);
pinMode(ultrasonicEchoPin, INPUT);
pinMode(ultrasonicLedPin, OUTPUT);
myservo.attach(servoPin);
Serial.begin(115200);
}
void loop() {
int pirValue = digitalRead(pirPin);
if (pirValue == HIGH) {
digitalWrite(pirLedPin, HIGH);
Serial.println("Sensor PIR mendeteksi gerakan!");
objectDetected = true; // Objek terdeteksi
// Gerakkan servo motor ke posisi tertentu (misalnya, 90 derajat)
myservo.write(90);
} else {
digitalWrite(pirLedPin, LOW);
if (objectDetected) {
// Jika objek terdeteksi sebelumnya, kembalikan servo ke posisi awal
myservo.write(0);
objectDetected = false; // Reset status deteksi objek
}
}
digitalWrite(ultrasonicTrigPin, LOW);
delayMicroseconds(2);
digitalWrite(ultrasonicTrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(ultrasonicTrigPin, LOW);
long duration = pulseIn(ultrasonicEchoPin, HIGH);
int distance = duration * 0.034 / 2;
int desiredDistance = 20;
if (distance < desiredDistance) {
digitalWrite(ultrasonicLedPin, HIGH);
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm, Objek terdeteksi!");
} else {
digitalWrite(ultrasonicLedPin, LOW);
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm, Tidak ada objek.");
}
delay(100);
}