#include <avr/sleep.h>
#include <Arduino.h> // Include Arduino tone library
#define trigPin 9
#define echoPin 8
#define buzzerPin 5
#define proximityLED 7
#define vibrationMotorPin 6
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);
pinMode(vibrationMotorPin, OUTPUT);
}
void loop() {
long duration, distance;
// Trigger the ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the echo time
duration = pulseIn(echoPin, HIGH);
// Calculate the distance in cm
distance = duration * 0.034 / 2;
// Print the distance to the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Control the LED, buzzer, and vibration motor based on distance
if (distance < 40 && distance >= 30) {
digitalWrite(proximityLED, LOW);
noTone(buzzerPin);
digitalWrite(vibrationMotorPin, LOW);
} else if (distance < 30 && distance >= 20) {
digitalWrite(proximityLED, HIGH);
tone(buzzerPin, 500, 200); // Low frequency beep
analogWrite(vibrationMotorPin, 128); // Low vibration
} else if (distance < 20 && distance >= 10) {
digitalWrite(proximityLED, HIGH);
tone(buzzerPin, 1000, 200); // Medium frequency beep
analogWrite(vibrationMotorPin, 200); // Medium vibration
} else if (distance < 10) {
digitalWrite(proximityLED, HIGH);
tone(buzzerPin, 1500, 800); // High frequency beep
analogWrite(vibrationMotorPin, 255); // High vibration
} else {
digitalWrite(proximityLED, LOW);
noTone(buzzerPin);
digitalWrite(vibrationMotorPin, LOW);
}
delay(100);
// Enter sleep mode if the interval has passed
if (millis() - previousMillis >= interval) {
previousMillis = millis();
sleep();
}
}
void sleep() {
digitalWrite(proximityLED, LOW);
digitalWrite(buzzerPin, LOW);
digitalWrite(vibrationMotorPin, 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();
}