python 中每次中断后重置睡眠时间

Reset sleep time after every interrupt in python

基本上我正在研究 PIR 传感器,当检测到入侵者时,它会进入 1 分钟的睡眠时间。我想在睡眠时间检测到入侵者时重置此睡眠时间。 下面是代码:

`import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN)

try:
    while True:
        i=GPIO.input(18)
        if i==1:
            print("Intruder")
            time.sleep(60)
        elif i==0:
            print("No intruder")
            time.sleep(60)
except KeyboardInterrupt:
    GPIO.cleanup()
    exit(0)`

手头没有 raspberry pi...可以试试这个,在 ipython 中使用键盘输入。

try:
    while True:
    # i=int(input('input number: '))
    i=int(i=GPIO.input(18))
        if i!=1:
            print("No intruder")
        else:
            print("Intruder")
        time.sleep(60)

这是一个使用线程的解决方案:

from threading import Thread, Event
import time

import RPi.GPIO as GPIO


class MyThread(Thread):
    def __init__(self, timeout=60):
        super(MyThread, self).__init__()
        self.intruder_spotted = Event()
        self.timeout = timeout

        self.daemon = True

    def run(self):
        while True:
            if self.intruder_spotted.wait(self.timeout):
                self.intruder_spotted.clear()
                print("Intruder")
            else:
                print("No intruder")



t = MyThread(60)

GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN)

try:
    t.start()
    while True:
        i=GPIO.input(18)
        if i==1:
            t.intruder_spotted.set()

        time.sleep(1)

except KeyboardInterrupt:
    GPIO.cleanup()
    exit(0)