我正在 Raspberry Pi 上使用 Python 进行一些测试。硬件是一系列连接到达林顿阵列 (ULN2803) 的 SPDT 继电器,该阵列连接到树莓派 B 的 GPIO。
如果我将 GPIO 引脚设置为高电平,则相应的继电器会拉动。如果我将其设置为低,它会释放。我可以使用循环将所有 GPIO:s 设置为高电平,并且所有继电器都拉动,除了最后一个(?)。但是,如果我run time.sleep()
在循环将所有引脚设置为高电平后,它们都会自动设置为低电平。
检查下面的代码;当它运行时,它会遍历 8 个 GPIO:s,一次设置一个高电平,并在每个 GPIO 之间休眠 200 毫秒。这有效,但最后一个没有被激活。之后,它会休眠 1 秒,这会导致所有引脚变为低电平。然后它开始再次遍历它们,向后,关闭它们。一旦它向后开始,在第一次迭代中,一切都会再次变高。这是为什么?它不会发生在一个循环中,只是在它们之间。就像当 sleep() 在循环外运行时,一切都恢复到程序启动之前的状态。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
iopins = [4,7,8,9,10,11,17,18]
try:
for x in iopins:
GPIO.setup(x, GPIO.OUT)
GPIO.output(x,0)
while True:
for x in iopins: #turn on.
time.sleep(0.2)
GPIO.output(x, GPIO.HIGH)
time.sleep(1) #<-- causes all GPIOs to pull low...
for y in reversed(iopins): #Turning off.
GPIO.output(y, GPIO.LOW) #<--here all GPIOs pulls high upon first iteration
time.sleep(0.2)
finally:
GPIO.cleanup()
另一个奇怪的事情是,如果数组 IOPINS 只包含一个实体,它就不起作用。