gpt4 book ai didi

Python rpi GPIO输出控制基于GPIO输入和一天中的时间

转载 作者:行者123 更新时间:2023-12-05 06:59:02 27 4
gpt4 key购买 nike

我正在尝试编写一个小脚本来基于两个因素控制两个树莓派的 gpio 输出引脚:GPIO.input.17 的状态和一天中的时间。

我希望 gpio.output.23 和 gpio.output.25 在 gpio.input.17 低时也低。
当 gpio.input.17 高且时间在 0700-2159 之间时,我希望 gpio.output.23 变高。
当 gpio.input.17 高且时间在 2200-0659 之间时,我希望 gpio.output.25 变高。

到目前为止,我整理的代码如下所示:

#!/usr/bin/python


import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)


# Setup GPIO pins
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # set GPIO 17 as input
GPIO.setup(23, GPIO.OUT) # set GPIO 23 as output
GPIO.setup(25, GPIO.OUT) # set GPIO 25 as output
GPIO.output(23, 0) # set GPIO 23 as low
GPIO.output(25, 0) # set GPIO 25 as low

while True:
dt = list(time.localtime())
hour = dt[3]
minute = dt[4]
second = dt[5]
time.sleep(1)
print hour,minute,second;
PIR_Active = GPIO.input(17)
if not PIR_Active:
GPIO.output(23, 0)
GPIO.output(25, 0)
elif (PIR_Active and (hour>=00 and hour<=6) and (minute >=00 and minute<=59) and (second >=0 and second<=59)):
GPIO.output(25, 1)
elif (PIR_Active and (hour>=7 and hour<=11) and (minute>=0 and minute<=36) and (second>=0 and second<=59)):
GPIO.output(23, 1)
else: (PIR_Active and (hour>=11 and hour<=23) and (minute >=37 and minute<=59) and (second >=0 and second<=59));
GPIO.output(25, 1)
time.sleep(1)
GPIO.cleanup()

我将 LED 连接到引脚 23 和 25,脚本中显示的时间来 self 的测试,我使用此代码看到的结果是:
Out.Pin 23 跟随 In.Pin.17 的状态在高和低之间切换,同时时间变量为真
Out.Pin 23 在时间变量不正确时停止在高低之间切换
我觉得我有 Out.Pin.23 工作...

Out.Pin 25 在代码执行时立即亮起,无论 In.Pin.17 的状态或时间如何都保持点亮。

请忽略脚本中的时间,它们是我测试的,不符合上述要求。

我是编码和编写脚本的初学者,非常感谢社区的任何帮助。

谢谢

最佳答案

首先,我承认这不是您问题的完整答案,但评论太多了。

这个部分答案的目的是建议简化日期时间测试。

  • 设置一个现在时间
  • 设置时间
  • 设置一个晚上时间
  • 使用一个简单的逻辑运算符来测试现在是白天还是晚上。

例子:

import datetime as dt

now = dt.datetime.now().time()
day = dt.time(7, 00)
night = dt.time(22, 00)

# Test if it's day time.
now
>>> datetime.time(14, 8, 6, 000000)
day < now < night
>>> True

# Test again at midnight.
now
>>> datetime.time(0, 0)
day < now < night
>>> False

将此逻辑集成到您的代码中将有助于简化 if/elif 语句。

例如,这个:

(PIR_Active and (hour>=00 and hour<=6) and (minute >=00 and minute<=59) and (second >=0 and second<=59))

...可以变成这样 - 显然使用您自己的时间定义。

all([PIR_Active, day < now < night])

关于Python rpi GPIO输出控制基于GPIO输入和一天中的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64480895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com