簡體   English   中英

帶 GPIO LED 的閃爍 LED 腳本

[英]Blinking led script with GPIO LEDS

我已經開始在我的樹莓派上學習 Python。 我在 GPIO 引腳 8、10、12、16 和 18 上有 5 個 LED。

我有另一個代碼在工作,但我試圖讓它更緊湊。 這個不工作,但你可能猜到我想做什么。

我試圖通過循環遍歷chan_list列表使每個 LED 閃爍,但我被卡住了。 如何為列表的每個條目重復 function?

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

您可以使用itertools.cycle() function 創建一個迭代器,等待它! 循環遍歷值是列表。

這意味着這樣的事情應該可以工作(我無法測試)。 請注意,我還將blink()的定義移出循環——無需多次執行。

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

def blink():應該在頂部附近定義,而不是在循環內部。 GPIO.output() function 將單個引腳號作為其輸入,而不是引腳列表。 GPIO.setup() 也是如此。 為了讓事情變得更簡單,去掉 function。 在這種特定情況下,您不需要它。 您應該在每個元素上使用for循環到 go 並在其上調用 GPIO.setup() 。 然后,在while循環內部,您需要另一個for循環,它遍歷 chan_list 中的每個元素並打開和關閉它們。 我現在沒有 Raspberry Pi,但我敢打賭這可以完成工作:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM