#define ECHO_PIN 8
#define TRIG_PIN 7
#define RED_LED_PIN 5
#define GREEN_LED_PIN 6
#define TIMEOUT 5000
float readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void setup() {
Serial.begin(9600);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
}
void loop() {
static unsigned long timeCapture;
if (!timeCapture && readDistance() <= 31) { // Door is Open - Waiting for Timeout...
timeCapture = millis();
digitalWrite(RED_LED_PIN, LOW);
}
if (readDistance() >= 30) { // Door is Closed - Room Occupied
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
timeCapture = 0;
}
if(timeCapture && (millis() - timeCapture) >= TIMEOUT) { // Open Timeout expired - Room Available
digitalWrite(GREEN_LED_PIN, HIGH);
timeCapture = 1;
}
}