如何在python中暂停一个脚本以防止同时检测到两个传感器?

2024-09-28 16:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python脚本中有一个函数,它检测两个振动传感器,问题是传感器非常敏感,所以通常当一个传感器被击中时,它们都被检测到,这给了我一个错误的读数。我怎样才能阻止他们同时被发现呢?我想查出哪个是第一个。这就是我试过的-

#!/usr/bin/env python
import RPi.GPIO as GPIO
from time import sleep

def setup():
    GPIO.setmode(GPIO.BOARD)         
    GPIO.setup(KnockPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(ShockPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def shock():
    print('shock')

def knock():
    print('knock')

def register_callbacks():
    if GPIO.add_event_detect(ShockPin, GPIO.FALLING, callback=shock, bouncetime=5000):
        sleep(5)
    elif GPIO.add_event_detect(KnockPin, GPIO.FALLING, callback=knock, bouncetime=5000):
        sleep(5)

if __name__ == '__main__':
    try:
        setup()
        register_callbacks()

Tags: inimportgpiodefsetupsleep传感器pull
1条回答
网友
1楼 · 发布于 2024-09-28 16:23:11

只是一个建议,我没有测试它的设置。保存最后一个事件的时间(使用datetime),然后检查最后一个事件是否早于5秒。你知道吗

import datetime
sensor_delay = 5 #delay in seconds
last_event = datetime.datetime.now()

def shock():
    global last_event
    if datetime.datetime.now() > last_event + datetime.timedelta(seconds=sensor_delay):
        print ('shock')
        last_event = datetime.datetime.now()

def knock():
    global last_event
    if datetime.datetime.now() > last_event + datetime.timedelta(seconds=sensor_delay):
        print('knock')
        last_event = datetime.datetime.now()

相关问题 更多 >