【问题标题】:Trouble coding an LED selector in Python在 Python 中编码 LED 选择器时遇到问题
【发布时间】:2013-04-02 18:07:39
【问题描述】:

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

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

【问题讨论】:

    标签: python led gpio


    【解决方案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))
    

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

    【讨论】:

    • 哇,这太棒了!我不知道我可以像这样把一根绳子弄断。它非常有帮助!它所做的一件奇怪的事情是它只让 LED 非常短暂地闪烁。我在这里循环了代码的最后一部分以使其稳定。我可以做点别的吗?
    • @user2237256 我不确定,因为我从未真正使用过 RPi,但这听起来是正确的做法。
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2018-03-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多