#include <Adafruit_NeoPixel.h>
#include <Servo.h>
//induction_lamp
#define PIN 6 // Adafruit_NeoPixel
#define NUMPIXELS 16
#define PIR_PIN 2
//safe_passage alarm
#define trigPin_safe_passage 1
#define echoPin_safe_passage 3
#define redLed 4
#define buzzerPin 8
#define safeDistance 100
//parking space detection
#define trigPin_parking 9
#define echoPin_parking 10
#define greenPin_parking 13
#define redPin_parking 12
//servo
#define trigPin_servo 5
#define echoPin_servo 7
#define motorPin 11
#define distanceThreshold 25
//1234 6 8910 12 13
//5 7 11
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Servo motor;
void setup() {
//induction_lamp
pixels.begin();
pinMode(PIR_PIN, INPUT);
//safe_passage alarm
pinMode(trigPin_safe_passage, OUTPUT);
pinMode(echoPin_safe_passage, INPUT);
pinMode(redLed, OUTPUT);
pinMode(buzzerPin, OUTPUT);
//parking_space_detection
pinMode(trigPin_parking, OUTPUT);
pinMode(echoPin_parking, INPUT);
pinMode(greenPin_parking, OUTPUT);
pinMode(redPin_parking, OUTPUT);
//servo
pinMode(trigPin_servo, OUTPUT);
pinMode(echoPin_servo, INPUT);
motor.attach(motorPin);
motor.write(0);
Serial.begin(9600);
}
void loop() {
induction_lamp();
safe_passage_alarm();
parking_space_detection();
servo();
}
void induction_lamp(){
if (digitalRead(PIR_PIN) == HIGH) {
pixels.setBrightness(255);
pixels.fill(pixels.Color(255, 255, 255));
pixels.show();
delay(10000);
} else {
for (int i = 0; i < 256; i++) {
pixels.fill(pixels.Color(i, i, i));
pixels.show();
delay(10);
}
for (int i = 255; i > 0; i--) {
pixels.fill(pixels.Color(i, i, i));
pixels.show();
delay(10);
}
}
}
void safe_passage_alarm(){
digitalWrite(trigPin_safe_passage, LOW);
delayMicroseconds(2);
digitalWrite(trigPin_safe_passage, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin_safe_passage, LOW);
long duration = pulseIn(echoPin_safe_passage, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Safe Passage Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < safeDistance) {
for (int i = 0; i < 5; i++) {
digitalWrite(redLed, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(100);
digitalWrite(redLed, LOW);
digitalWrite(buzzerPin, LOW);
delay(100);
}
delay(500);
}
else if (distance > safeDistance) {
digitalWrite(redLed, HIGH);
}
}
void parking_space_detection(){
long duration;
int distance;
digitalWrite(trigPin_parking, LOW);
delayMicroseconds(2);
digitalWrite(trigPin_parking, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin_parking, LOW);
duration = pulseIn(echoPin_parking, HIGH);
distance = duration * 0.034 / 2;
if (distance < 100) {
digitalWrite(greenPin_parking, LOW);
digitalWrite(redPin_parking, HIGH);
} else {
digitalWrite(greenPin_parking, HIGH);
digitalWrite(redPin_parking, LOW);
}
}
void servo(){
long duration, distance;
digitalWrite(trigPin_servo, LOW);
delayMicroseconds(2);
digitalWrite(trigPin_servo, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin_servo, LOW);
duration = pulseIn(echoPin_servo, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Servo Distance: ");
Serial.println(distance);
if (distance <= distanceThreshold ) {
motor.write(90);
// delay(10);
//motor.write(0);
}
else {
motor.write(0);
}
}