我正在尝试在我的覆盆子pi上构建一个安全系统。我有9个按钮来输入代码。输入代码后,您可以按“arm”来布防系统。然后,功能检查PIR传感器是否移动。当检测到移动时,警报应该响起,我需要时间。睡眠。 所以我的实际问题是,随着时间的推移,我阻止程序暂停其时间,因此我无法在报警模式下撤防系统。
到目前为止,我的想法只是将所有内容都放入线程中。但到目前为止没有成功。 time.sleep还有更好的解决方案吗?
答案 0 :(得分:0)
如果您的问题只是寻找更好的方法来使用time.sleep,您可以考虑使用time.time而不是time.sleep,然后使用检查来查看应该发生的操作。这样可以避免使用time.sleep来阻止所有事件(包括你的GUI)。作为一个快速书面的例子来证明这个想法:
from time import time
millis = lambda: int(time() * 1000)
def updateAlarm(lastTime, beepRate, currentState):
now = millis()
if now > (lastTime + beepRate):
return (not(currentState), now)
return (currentState, now)
last = millis() #set the first time for the alarm
rate = 2000 # change state every two seconds
state = False # the alarm is currently off
while True: # just for demonstration purposes, while True: won't work inside of a tkinter GUI
change = updateAlarm(last, rate, state)
if change[0] != state: # if the state has changed, update it and print
state = change[0]
last = change[1]
print(state)
根据您的实现,这可能更有意义,特别是如果您不使用tkinter。就个人而言,我认为Bryan的解决方案更加优雅,特别是因为它不需要不断检查警报以确定是否需要更新。