// https://forum.arduino.cc/t/room-light-control-with-two-laser-beam-in-arduino/1414689
#define outPin 2
#define inPin 3
int inLED = 4, outLED = 5;
int occupants = 0, occupantsOld, entered, exited;
bool entering = false, exiting = false;
int debounce = 150;
void setup() {
Serial.begin(115200);
pinMode(outPin, INPUT_PULLUP);
pinMode(inPin, INPUT_PULLUP);
pinMode(inLED, OUTPUT);
pinMode(outLED, OUTPUT);
Serial.println("Hello, World!");
}
void loop() {
if (entering == false && exiting == false) { // no sequence started
if (digitalRead(outPin) == LOW) {
entering = true;
exiting = false;
digitalWrite(outLED, HIGH);
Serial.print("Entering. ");
}
if (digitalRead(inPin) == LOW) {
entering = false;
exiting = true;
digitalWrite(inLED, HIGH);
Serial.print("Exiting. ");
}
delay(debounce);
}
if (entering == true && exiting == false) { // enter sequence started
if (digitalRead(inPin) == LOW) {
digitalWrite(inLED, HIGH);
Serial.print("Entered. ");
delay(debounce);
occupants++;
entered++;
}
}
if (entering == false && exiting == true) { // exit sequence started
if (digitalRead(outPin) == LOW) {
digitalWrite(outLED, HIGH);
Serial.print("Exited. ");
delay(debounce);
occupants--;
exited++;
}
}
if (occupants != occupantsOld) { // if count changes
occupantsOld = occupants; // store current count
Serial.print("Occupants: ");
Serial.print(occupants);
Serial.print(" Entered: ");
Serial.print(entered);
Serial.print(" Exited: ");
Serial.print(exited);
Serial.println();
entering = false; // reset sequences
exiting = false;
digitalWrite(inLED, LOW);
digitalWrite(outLED, LOW);
}
}IN
OUT
Entering
Exiting