#define TRIGGER_PIN1 4
#define ECHO_PIN1 2
#define TRIGGER_PIN2 32
#define ECHO_PIN2 33
#define BLUE_LED 22
#define RED_LED 23
#define BUZZER 15
#define BUTTON1_PIN 14 // Define the pin for button 1
#define BUTTON2_PIN 12 // Define the pin for button 2
int incomingCount = 0;
int outgoingCount = 0;
int maxCapacity = 10; // Set your desired maximum capacity here
void setup() {
pinMode(TRIGGER_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIGGER_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(BUTTON1_PIN, INPUT_PULLUP); // Use internal pull-up resistor for button 1
pinMode(BUTTON2_PIN, INPUT_PULLUP); // Use internal pull-up resistor for button 2
Serial.begin(115200);
}
void loop() {
int distance1 = getDistance(TRIGGER_PIN1, ECHO_PIN1);
int distance2 = getDistance(TRIGGER_PIN2, ECHO_PIN2);
// Check if Button 1 is pressed to increase maxCapacity
if (digitalRead(BUTTON1_PIN) == LOW) {
maxCapacity++;
delay(1000); // Debounce delay
}
// Check if Button 2 is pressed to decrease maxCapacity
if (digitalRead(BUTTON2_PIN) == LOW && maxCapacity > 0) {
maxCapacity--;
delay(1000); // Debounce delay
}
if (distance1 < 30 && distance1 > 0) {
digitalWrite(BLUE_LED, HIGH);
tone(BUZZER, 1000, 500);
incomingCount++;
delay(1000);
}
digitalWrite(BLUE_LED, LOW);
if (distance2 < 30 && distance2 > 0) {
digitalWrite(RED_LED, HIGH);
tone(BUZZER, 1000, 500);
if (outgoingCount < incomingCount) {
outgoingCount++; // Only increment if outgoingCount is less than incomingCount
}
delay(1000);
}
digitalWrite(RED_LED, LOW);
// Calculate the current visitors count with the maximum being zero
int currentVisitors = max(0, incomingCount - outgoingCount);
Serial.print("Incoming: ");
Serial.print(incomingCount);
Serial.print(", Outgoing: ");
Serial.print(outgoingCount);
Serial.print(", Current visitors: ");
Serial.println(currentVisitors);
Serial.print(", MaxCapacity: ");
Serial.println(maxCapacity);
if (currentVisitors >= maxCapacity) {
// Capacity is full, turn on both red and blue LEDs and sound the buzzer continuously
digitalWrite(RED_LED, HIGH);
digitalWrite(BLUE_LED, HIGH);
while (currentVisitors >= maxCapacity) {
tone(BUZZER, 1000, 500);
}
} else {
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, LOW);
noTone(BUZZER); // Turn off the buzzer
}
delay(100);
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
return distance;
}