【发布时间】:2015-04-06 08:02:24
【问题描述】:
我正在使用连接到 Raspberry Pi 上的 GPIO 引脚的瞬时开关来控制 4 个 LED。 我连接了五个按钮。 按下前 4 个按钮时,根据当前状态将连接的 LED 的状态从打开切换到关闭或从关闭切换到打开。 第五个按钮根据 GPIO 18 的开/关状态打开所有 4 个 LED 或关闭所有 4 个 LED。 我还有一个额外的 LED 连接到 GPIO 引脚 18,这只是根据引脚 18 的状态打开或关闭。 这个项目的想法是能够独立控制 LED 并拥有一个主控制按钮。连接到引脚 18 的 LED 是监控 LED,如果 4 个 LED 中的任何一个点亮,它应该点亮,并且只有在所有 4 个 LED 同时熄灭时它才应该熄灭。 这一切都基于监控按钮按下并采取相应措施的 Python 脚本。
我编写的用于一次控制所有 LED 的代码如下所示:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)
chan_list = (4,17,22,27)
GPIO.setup(chan_list,GPIO.OUT)
GPIO.output(chan_list,0)
GPIO.setup(18,GPIO.OUT)
GPIO.output(18,0)
while True:
input_state = GPIO.input(26)
if input_state == False:
chan_list = (4,17,22,27)
GPIO.output(18, not GPIO.input(18))
time.sleep(0.1)
GPIO.output(chan_list, GPIO.input(18))
time.sleep(0.4)
此代码似乎运行良好。如您所见,它切换了引脚 18 的当前状态,然后将该状态应用于引脚 4、17、22 和 27,这些引脚是 LED 所连接的引脚。
我编写的用于控制各个 LED 的代码有点复杂,看起来像这样:
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(4,GPIO.OUT)
GPIO.output(4,0)
GPIO.setup(17,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
while True:
input_state = GPIO.input(5)
if input_state == False:
if GPIO.output(17,0) == False:
GPIO.output(4, not GPIO.input(4))
elif GPIO.output(22,0) == False:
GPIO.output(4, not GPIO.input(4))
elif GPIO.output(27,0) == False:
GPIO.output(4, not GPIO.input(4))
else:
GPIO.output(4, not GPIO.input(4))
time.sleep(0.1)
GPIO.output(18, GPIO.input(4))
time.sleep(0.4)
有 4 个版本的引脚调整,每个 LED 一个版本,这个版本使用引脚 5 作为输入来检测按钮按下,引脚 4 作为输出来激活 LED。我想做的是这样的:
按下时(如果 LED1 熄灭)
- Toggle LED1 on, also toggle pin 18 on to activate the indicator light.
- Take no further action.
按下时(如果 LED1 亮)
- Check if pin 17 is on or off;
- If pin 17 is on toggle LED1 off and take no further action.
- If pin 17 is off check if pin 22 is on or off;
- If pin 22 is on toggle LED1 off and take no further action.
- If pin 22 is off check if pin 27 is on or off;
- If pin 27 is on toggle LED1 off and take no further action.
- If pin 27 is off toggle LED1 off then set pin 18 to the current status of pin 4 (LED1).
然而,实际情况是这样的:
按下时(如果 LED1 熄灭)
- Turns off all of the other 3 LEDs then toggles LED1 on and toggles pin 18 on.
按下时(如果 LED1 熄灭)
- Turns off all LEDs and toggles pin 18 off.
我这辈子都想不通。 非常感谢您的帮助。
附:原谅我的无知,我昨天开始学习python,完全没有任何编程经验。我确定这很简单,但我似乎无法解决它。
【问题讨论】:
-
仅供参考,python 有一个名为
elif的关键字用于 else if。 -
谢谢@Haketo,我已经用它来清理脚本了。
标签: python raspberry-pi gpio led