0

编程新手,所以我会尽力解释:

我正在尝试在我的太阳能设置中使用 Pi Zero 来切换 x86 主板上的开机输入(基本上用作电源按钮)。这个想法是,当电池电压足够高时,电池电压监视器将 Pi 上的引脚 14 设置为高电平。脚本读取此输入,然后切换 Pi 上的输出 (26),进而关闭继电器一秒钟,然后激活主板上的开机输入。问题是我无法在一秒钟后关闭输出 (26)。该脚本不会忽略引脚 14,只会将输出 (26) 保持为高电平。(引脚 14 由电池监视器自然保持高电平,直到电池电量降至某个阈值以下)

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26,GPIO.OUT)

GPIO.output(26, 1)

while True:
        if GPIO.input(14)==1:
                GPIO.output(26, 0)
                sleep(1)
                GPIO.output(26, 1)
        else:
                GPIO.output(26, 1)

GPIO.cleanup()
4

1 回答 1

0

这是一种可能的解决方案,它轮询 GPIO14 1/秒的值并使用该变量power_on来确定我们如何响应该值:

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26,GPIO.OUT)

GPIO.output(26, 1)

power_on = False
while True:
    if not power_on:
        if GPIO.input(14) == 1:
                GPIO.output(26, 0)
                sleep(1)
                GPIO.output(26, 1)
                power_on = True
    else:
        if GPIO.input(14) == 0:
            power_off = True

    time.sleep(1)

# Note that you're never going to reach this line.
GPIO.cleanup()

或者,您可以让您的代码块直到引脚 14 更改,从而导致如下所示:

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26,GPIO.OUT)

GPIO.output(26, 1)

while True:
    GPIO.wait_for_edge(14, GPIO.RISING)
    GPIO.output(26, 0)
    sleep(1)
    GPIO.output(26, 1)

# Note that you're never going to reach this line.
GPIO.cleanup()

这用于GPIO.wait_for_edge()等待 GPIO14 上的上升沿(低 ➡️ 高转换),然后触发您的继电器。

于 2022-03-01T16:52:32.200 回答