首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有GPIO led的闪烁led脚本

带有GPIO led的闪烁led脚本
EN

Stack Overflow用户
提问于 2021-03-14 08:49:56
回答 2查看 75关注 0票数 0

我已经开始在我的树莓派上学习Python了。我在GPIO引脚8、10、12、16和18上有5个LED。

我有另一段代码可以工作,但我试图让它更紧凑。这个不起作用,但是你大概可以猜到我想要做什么。

我试图通过循环浏览chan_list列表让每个led一个接一个地闪烁,但我被卡住了。如何为列表中的每个条目重复该函数?

代码语言:javascript
复制
import RPi.GPIO as GPIO
from time import sleep

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
chan_list = [8,10,12,16,18]
GPIO.setup(chan_list, GPIO.OUT, initial=0)
delay = 50
#delay = float(input("50-1000ms"))
delay = delay / 1000
led = 0
while True:
    def blink():
        GPIO.output(chan_list, 1)
        sleep(delay)
        GPIO.output(chan_list, 0)
        sleep(delay)
    blink()
EN

回答 2

Stack Overflow用户

发布于 2021-03-14 09:26:35

您可以使用itertools.cycle()函数创建一个迭代器,该迭代器将循环遍历列表中的值。

这意味着像这样的东西应该可以工作(我不能测试它)。注意,我还将blink()的定义移出了循环-不需要重复一次。

代码语言:javascript
复制
from itertools import cycle  # ADDED.
from time import sleep
import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
chan_list = [8,10,12,16,18]
chan_cycler = cycle(chan_list)  # ADDED.
GPIO.setup(chan_list, GPIO.OUT, initial=0)
delay = 50
#delay = float(input("50-1000ms"))
delay = delay / 1000
delay = 1
led = 0

def blink():
    chan = next(chan_cycler)  # ADDED.
    GPIO.output(chan, GPIO.HIGH)
    sleep(delay)
    GPIO.output(chan, GPIO.LOW)
    sleep(delay)

while True:
    blink()
票数 0
EN

Stack Overflow用户

发布于 2021-03-14 09:27:13

def blink():应该在顶部附近定义,而不是在循环内部。GPIO.output()函数接受单个管脚编号作为输入,而不是一列管脚。GPIO.setup()也是如此。为了让事情变得简单一点,去掉这个函数。在这种特定情况下,您不需要它。您应该使用for循环遍历每个元素并对其调用GPIO.setup()。然后,在while循环内部,您需要另一个for循环,该循环遍历chan_list中的每个元素并打开和关闭它们。我现在身上没有覆盆子Pi,但我敢打赌这会完成这项工作:

代码语言:javascript
复制
import RPi.GPIO as GPIO
from time import sleep

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
chan_list = [8,10,12,16,18]
for pin_number in chan_list:
    GPIO.setup(pin_number, GPIO.OUT, initial=0)
delay = 50
#delay = float(input("50-1000ms"))
delay = delay / 1000
led = 0
while True:
    for pin_number in chan_list:
        GPIO.output(pin_number, 1)
        sleep(delay)
        GPIO.output(pin_number, 0)
        sleep(delay)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66620028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档