[英]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.