#include <ESP32Servo.h>
#define PIR_PIN 13
#define ULTRASONIC_TRIG_PIN 12
#define ULTRASONIC_ECHO_PIN 14
#define SERVO_PIN 2
#define LED_PIN 4
Servo myservo;
int distance = 0;
void setup() {
Serial.begin(9600);
pinMode(PIR_PIN, INPUT);
pinMode(ULTRASONIC_TRIG_PIN, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
myservo.attach(SERVO_PIN);
myservo.write(0); // Initialize servo position
digitalWrite(LED_PIN, LOW); // Ensure LED is initially off
}
void loop() {
// Check PIR sensor
int pirState = digitalRead(PIR_PIN);
if (pirState == HIGH) {
// Motion detected
int fillLevel = checkFillLevel();
Serial.print("Dustbin fill level: ");
Serial.print(fillLevel);
Serial.println(" %");
// Open lid
openLid();
delay(5000); // Keep the lid open for 5 seconds
closeLid(); // Close the lid
} else {
checkFillLevel();
int fillLevel = checkFillLevel();
Serial.print("Dustbin fill level: ");
Serial.print(fillLevel);
Serial.println(" %");
}
delay(1000);
}
int checkFillLevel() {
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
int duration = pulseIn(ULTRASONIC_ECHO_PIN, HIGH);
int distance_cm = duration * 0.034 / 2; // Convert duration to distance in cm
return distance_cm;
}
void openLid() {
for (int pos = 0; pos <= 90; pos += 1) {
myservo.write(pos);
delay(10);
}
// Missing code here...
for (int pos = 90; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(10);
}
}
}