from machine import Pin, PWM
import time
TRIGGER_PIN1 = 4
ECHO_PIN1 = 2
TRIGGER_PIN2 = 32
ECHO_PIN2 = 33
BLUE_LED = 22
RED_LED = 23
BUZZER = 15
incomingCount = 0
outgoingCount = 0
maxCapacity = 5 # Set your desired maximum capacity here
def setup():
global incomingCount, outgoingCount
incomingCount = 0
outgoingCount = 0
trigger1 = Pin(TRIGGER_PIN1, Pin.OUT)
echo1 = Pin(ECHO_PIN1, Pin.IN)
trigger2 = Pin(TRIGGER_PIN2, Pin.OUT)
echo2 = Pin(ECHO_PIN2, Pin.IN)
blue_led = Pin(BLUE_LED, Pin.OUT)
red_led = Pin(RED_LED, Pin.OUT)
buzzer = PWM(Pin(BUZZER))
buzzer.freq(1000)
def get_distance(trigPin, echoPin):
trigPin.off()
time.sleep_us(2)
trigPin.on()
time.sleep_us(10)
trigPin.off()
duration = machine.time_pulse_us(echoPin, 1, 30000) # 30ms maximum timeout for 5m distance
distance = duration * 0.034 / 2
return distance
def loop():
while True:
distance1 = get_distance(Pin(TRIGGER_PIN1, Pin.OUT), Pin(ECHO_PIN1, Pin.IN))
distance2 = get_distance(Pin(TRIGGER_PIN2, Pin.OUT), Pin(ECHO_PIN2, Pin.IN))
if 0 < distance1 < 30:
Pin(BLUE_LED, Pin.OUT, value=1)
buzzer.duty(512)
incomingCount += 1
time.sleep(1)
buzzer.duty(0)
Pin(BLUE_LED, Pin.OUT, value=0)
if 0 < distance2 < 30:
Pin(RED_LED, Pin.OUT, value=1)
buzzer.duty(512)
if outgoingCount < incomingCount:
outgoingCount += 1
time.sleep(1)
buzzer.duty(0)
Pin(RED_LED, Pin.OUT, value=0)
currentVisitors = max(0, incomingCount - outgoingCount)
print("Incoming: {}, Outgoing: {}, Current visitors: {}, MaxCapacity: {}".format(
incomingCount, outgoingCount, currentVisitors, maxCapacity))
if currentVisitors >= maxCapacity:
Pin(RED_LED, Pin.OUT, value=1)
Pin(BLUE_LED, Pin.OUT, value=1)
while currentVisitors >= maxCapacity:
buzzer.duty(512)
else:
Pin(RED_LED, Pin.OUT, value=0)
Pin(BLUE_LED, Pin.OUT, value=0)
buzzer.duty(0)
time.sleep(0.1)
setup()
loop()