#include <Arduino.h>
#define TRIG_PIN 17
#define ECHO_PIN 16
#define LED_PIN 27 // Define the pin for the LED
// Define the threshold distance for occupancy
#define OCCUPIED_THRESHOLD 130 // in centimeters
// Variables for logging
unsigned long startTime, endTime, startTimeLed, endTimeLed, LEDSignalTime, transmissionTime, detectionTime;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT); // Initialize the LED pin
digitalWrite(LED_PIN, LOW); // Turn off the LED initially
}
long readDistance(uint8_t trigPin, uint8_t echoPin, unsigned long &detectionTime) {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
startTime = micros();
duration = pulseIn(echoPin, HIGH);
endTime = micros();
detectionTime = endTime - startTime;
distance = (duration / 2) / 29.1;
return distance;
}
void reportOccupancy(long distance) {
if (distance < OCCUPIED_THRESHOLD) {
Serial.println("Parking Spot: Occupied");
} else {
Serial.println("Parking Spot: Available");
}
}
void updateLED(bool isOccupied) {
if (isOccupied) {
digitalWrite(LED_PIN, HIGH); // Turn LED on if the spot is occupied
} else {
digitalWrite(LED_PIN, LOW); // Turn LED off if the spot is available
}
}
void loop() {
long distance = readDistance(TRIG_PIN, ECHO_PIN, detectionTime);
bool isOccupied = distance < OCCUPIED_THRESHOLD;
startTime = micros(); // Start logging transmission time just before processing
reportOccupancy(distance);
startTimeLed = micros();
updateLED(isOccupied);
endTimeLed = micros();
endTime = micros(); // Stop logging transmission time just after processing
transmissionTime = endTime - startTime;
LEDSignalTime = endTimeLed - startTimeLed;
//NOTE: Time is in microseconds!
// Log the metrics
Serial.println("----------------");
Serial.print("Transmission Time (us): ");
Serial.println(transmissionTime);
Serial.print("Detection Time (us): ");
Serial.println(detectionTime);
Serial.print("LED Signal Time (us): ");
Serial.println(LEDSignalTime);
Serial.println("========================");
delay(5000);
}