// Define pins for LEDs and sensor
const int trigPin = 9;
const int echoPin = 10;
const int ledGreen = 3;
const int ledYellow = 4;
const int ledRed = 5;
long duration;
int distance;
unsigned long parkingStartTime = 0;
bool parkingActive = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledRed, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Measure distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Logic for LEDs and parking timer
if (distance > 100) {
// Reset system
resetLEDs();
parkingStartTime = 0;
parkingActive = false;
}
else if (distance > 50 && distance <= 100) {
// Medium range: Green LED
resetLEDs();
digitalWrite(ledGreen, HIGH);
}
else if (distance > 20 && distance <= 50) {
// Close range: Yellow LED
resetLEDs();
digitalWrite(ledYellow, HIGH);
}
else if (distance <= 20) {
// Very close range: Red LED blinks and start parking timer
resetLEDs();
blinkRedLED();
if (parkingStartTime == 0) {
parkingStartTime = millis(); // Start timing
} else if (millis() - parkingStartTime >= 5000) {
// Start parking counter after 5 seconds
parkingActive = true;
}
}
// Parking time display
if (parkingActive) {
unsigned long parkingTime = (millis() - parkingStartTime) / 1000;
Serial.print("Parking Time: ");
Serial.print(parkingTime);
Serial.println(" seconds");
}
}
// Helper function to reset LEDs
void resetLEDs() {
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
}
// Helper function to blink red LED
void blinkRedLED() {
static bool ledState = false;
static unsigned long lastBlinkTime = 0;
if (millis() - lastBlinkTime >= 200) {
ledState = !ledState;
digitalWrite(ledRed, ledState);
lastBlinkTime = millis();
}
}