【问题标题】:Trying to create a timer to pause a loop in python试图创建一个计时器来暂停python中的循环
【发布时间】:2020-11-12 04:13:13
【问题描述】:

我又来搞乱定时器和运动传感器了。

我有一个连接到树莓派的 PIR 运动传感器。我想让运动传感器在再次检查运动之前有一分钟的冷却时间。我一直在搞乱一些线程......但我认为我不需要它,并且希望保持简单。

GPIO.setmode(GPIO.BCM)
PIR_PIN = 11
GPIO.setup(PIR_PIN, GPIO.IN)

motion_cooldown = 60
start = 0

while True:
    if(time.time() < start + motion_cooldown):
        print("cooldown")
    else: 
        if PIR_PIN == 1:
            print("motion detected")
            #do some stuff
            start = time.time()
        elif PIR_PIN == 0:
            print("no motion")
            #do some stuff
            start = 0         #reset start to 0 so the loop continues

我得到的当前错误是“'builtin_function_or_method 和 int 的实例之间不支持'

【问题讨论】:

  • timer.time() timer 对象来自哪里? time.time() 在 float fwiw 中给出时间
  • 这是问题中的错字。我的代码中有 time.time() 。将编辑我的问题以更正。
  • 如果是这种情况,您的代码可以工作,我复制粘贴(没有收到您提到的错误)并进行更改,然后我得到一个无限循环,如果问题是关于使循环暂停然后添加time.sleep(60) 在循环结束时
  • 如果你有start = time.time 而不是start = time.time(),你提到的可能会发生,但正如指出的那样,你的代码工作正常
  • 我应该提到我需要避免使用 time.sleep,因为它会暂停整个程序,并且我需要合并其他传感器。不过,我会再次检查我的代码。如果有什么不同的话,我会在 Thonny ide 中对其进行测试。

标签: python time raspberry-pi motion


【解决方案1】:

如果您没有调用该函数,则可能会发生这种情况,即您执行start = time.time 之类的操作,但您的代码没有这样做,并且无法重现。要暂停循环,您可以在 while 循环的末尾使用 time.sleep(60)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2021-05-22
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多