从 Pi (Python) 控制继电器的计时器出现奇怪的逻辑错误

问题描述 投票:0回答:0

我在树莓派上使用Python来控制灯定时器的继电器。这些功能相当简单:

    def timer_check(self):
        now = datetime.datetime.now().time()
        if self.timer_on <= now < self.timer_off:
            GPIO.output(self.light_pin, False) #Turn the light on
        else:
            GPIO.output(self.light_pin, True) #Turn the light off

self.timer_on 和 self.timer_off 就这样初始化了:

        self.timer_on = datetime.time(self.thresholds['TON'],0)
        self.timer_off = datetime.time(self.thresholds['TOFF'], 0)

我已经打印了每一个,它总是显示正确的时间和时区。

问题:

我让继电器在上午 10 点打开。这总是有效的。问题是在 22 点,继电器要关闭。这从来没有正常运作过。我测试了继电器,看看它是否会打开和关闭,以及它是否能在较短的时间范围内工作——也就是说,如果我将 on_time 设置为上午 10 点,将 off_time 设置为上午 10:30,或 10 点和 11 点。在这些测试中,打开和关闭按预期工作。

然而,它在 10 - 22 小时内永远无法正常工作。我想它可能会卡在某个地方,但事实并非如此。 22 点后我可以重新启动程序,它会关闭灯。然后第二天 10 点,灯就会按预期亮起。但22总是失败。

我已经检查以确保 python 支持我正在使用的运算符类型。它适用于我构建的每个测试用例。

我打印了 on_timeoff_timenow,以确保时间位于正确的时区。这里一切似乎都是正确的。

我检查了其他引脚和其他继电器,看看是否是硬件问题。事实并非如此。

我选择了其他时间,比如20、18、23,看看是否有一些奇怪的问题。还是没成功。

我已将开启/关闭时间拉得很近。这似乎使它按预期工作。所以我怀疑这个问题是由于开启状态和关闭状态之间的时间差距所固有的。也许这个问题是 RPi.GPIO 固有的。但是,如果是这种情况,那么为什么当我在 22 重置 Pi 以关闭灯并在 10 时按预期亮起时,没有出现问题?

这对我来说没有任何意义。我可以链接我的github并提出问题。谢谢你。

python timer gpio relayjs
© www.soinside.com 2019 - 2024. All rights reserved.