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)
基本上我正在研究 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)