我有4个LED连接到Raspberry Pi的GPIO输出。我想使用argv命令,以便我可以使用简单的二进制代码选择LED。例如:
python test.py 1010
这将点亮行中的第一个和第三个LED。问题是我不认为我正确接近这一点。这是我到目前为止的代码
from sys import argv
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
x, y = argv
print "Script:", x
if y == '0000':
GPIO.output(11, 0)
GPIO.output(12, 0)
GPIO.output(13, 0)
GPIO.output(15, 0)
if y == '0001':
GPIO.output(11, 0)
GPIO.output(12, 0)
GPIO.output(13, 0)
GPIO.output(15, 1)
GPIO.cleanup()
我遗漏了其余的组合,所以我不会讨论这个问题。我遇到了几个语法问题,但我想知道我是否应该废弃这个并以另一种方式去做。我很新,任何建议都会受到赞赏。
答案 0 :(得分:1)
这听起来非常像你真正想要的是将输入字符串的各个部分映射到GPIO.output
的调用值。通过遍历控制字符串,您可以轻松地完成此任务(并且代码远远少于您目前的代码):
led_map = {
# This maps each "bit" of your input string to the correct ID for GPIO.
0 : 11,
1 : 12,
2 : 13,
3 : 15
}
for i in xrange(len(y)):
bit = y[i]
GPIO.output(led_map[i], int(bit))
此设置可以防止您必须单独编码每个排列(即使只有两个或三个位,很快就变得很糟糕,更不用说四个或更多)。您可以单独考虑这些位,而不是考虑排列,并依次对每个位执行相应的功能。