PIR Sensors Triggered in Specific Order

Viewed 56

I have two PIR Sensors connected to a Raspberry Pi one used for either side of a doorway in my design.

I am needing help on how I can do something once the sensors are triggered in a particular order.

Lets call the sensors for simplicity A and B.

Since they will be used for room count I would like the count to increase when they are triggered in order AB and decrease when triggered in order BA.

I have tried this code earlier but it failed (I understand there is no roomCount implemented here but I was testing for expected output):

While True:
    if GPIO.input(pir1):
        if GPIO.input(pir2):
            print(“AB”)
   
    if GPIO.input(pir2):
        if GPIO.input(pir1):
            print(“BA”)

This code was constantly giving the output “AB” no matter which order they were triggered.

Any help on this issue would be appreciated.

2 Answers

I think you might do better with code more like this pseudo-code:

import time

maxWait = 2 #  Longest time (in seconds) to wait for other PIR to trigger

while True:
    if A is triggered:
        endTime = time.time() + maxWait
        while time.time() < endTime:
             if B is triggered:
                  print("AB")
                  # Sleep till the person has fully passed both sensors
                  while A is triggered or B is triggered:
                     sleep(0.1)

    if B is triggered:
        endTime = time.time() + maxWait
        while time.time() < endTime:
             if A is triggered:
                  print("BA")
                  while A is triggered or B is triggered:
                     sleep(0.1)    

You can try something like this:

condition = "" #create empty string
counter=0      #create counter :)
while True:
    if GPIO.input(pir1):
        condition+="A" #add char to it
    if GPIO.input(pir2):
        condition+="B" #add another char to it
    if "AB" in condition:
        counter += 1
        condition="" #reset the string
    elif "BA" in condition:
        counter -= 1
        condition="" #reset the string

Hope that helps.

Related