#include <avr/sleep.h>
#include <Arduino.h> // Include Arduino tone library
#define trigPin 9
#define echoPin 8
#define buzzerPin 5
#define proximityLED 7
unsigned long previousMillis = 0;
const long interval = 2000;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(proximityLED, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Adjust the constant below to calibrate for 20 cm
distance = duration * 0.035 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 40 && distance >= 20) {
digitalWrite(proximityLED, LOW);
}
if (distance < 20 && distance >= 10) {
digitalWrite(proximityLED, HIGH);
tone(buzzerPin, 1000, 200);
} else {
digitalWrite(proximityLED, LOW);
noTone(buzzerPin);
}
if (distance < 10) {
digitalWrite(proximityLED, HIGH);
tone(buzzerPin, 1000, 800);
} else {
noTone(buzzerPin);
}
delay(100);
if (millis() - previousMillis >= interval) {
previousMillis = millis();
sleep();
}
}
void sleep() {
digitalWrite(proximityLED, LOW);
digitalWrite(buzzerPin, LOW);
delay(1);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
delay(100); // Delay after waking up
digitalWrite(buzzerPin, HIGH);
sleep_disable();
}