1

我有 4 个 LED 连接到 Raspberry Pi 的 GPIO 输出。我想使用 argv 命令,以便可以使用简单的二进制代码选择 LED。例如:

蟒蛇测试.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()

我忽略了其余的组合,所以我不会夸大这个问题。我遇到了几个语法问题,但我想知道我是否应该放弃这个并以另一种方式去做。我是新手,任何建议将不胜感激。

4

1 回答 1

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

这种设置使您不必单独编码每个排列(即使只有两个或三个位,这很快就会变得很糟糕,更不用说四个或更多了)。无需考虑排列,您可以单独考虑位,并依次对每个位执行适当的功能。

于 2013-04-02T18:15:26.290 回答