无法用Python编写LED选择器

时间:2013-04-02 18:07:40

标签: python led gpio

我有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()

我遗漏了其余的组合,所以我不会讨论这个问题。我遇到了几个语法问题,但我想知道我是否应该废弃这个并以另一种方式去做。我很新,任何建议都会受到赞赏。

1 个答案:

答案 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))

此设置可以防止您必须单独编码每个排列(即使只有两个或三个位,很快就变得很糟糕,更不用说四个或更多)。您可以单独考虑这些位,而不是考虑排列,并依次对每个位执行相应的功能。