gpiozero-> MotionSensor和LED

问题描述

我正在尝试遵循this的示例。通过以下两行,一切都按预期运行

pir.when_motion = led.on
pir.when_no_motion = led.off

但是当我将事件处理程序分配给pir.when_motion

时,一切就停止了

我可以看到功能turnOnLedturnOffLed调用,但是看不到LED的亮起和熄灭。

下面是我的代码。我想念什么吗?

from gpiozero import MotionSensor,LED
from signal import pause

import time

pir = MotionSensor(4)
led = LED(16)
def logMessage(msg):
            print(msg)
    def turnOnLed():
            logMessage('About to turn on LED...')
            led.on
            logMessage('LED turned on...')
    def turnOffLed():
            logMessage('About to turn off LED...')
            led.off
            logMessage('LED turned off...')
    def myfun():
            logMessage('Motion detected...')
    
    
    pir.when_motion = led.on         #If I replace led.on with event handler trunOnLed,I cant see LED switching on.
    pir.when_no_motion = led.off
    logMessage('Before pause')
    pause()

我还注意到,pir.when_no_motion事件在pir.when_motion大约4秒钟后立即被触发,即使连续运动也是如此。关于可能出什么问题的任何指示?

解决方法

这是一个很小的错误。

内部函数turnOnLed应该已经调用函数led.on

通过将led.on替换为led.on()来解决的问题