2013-04-02 59 views
1

我有4個LED連接到Raspberry Pi的GPIO輸出。我想使用argv命令,以便使用簡單的二進制代碼來選擇LED。例如:在Python中編碼LED選擇器時遇到的問題

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

林離開了組合的剩餘部分,所以我不臃腫這個問題。我碰到幾個語法問題,但我想知道如果我應該廢除這個並以另一種方式去做。林新和任何意見將不勝感激。

回答

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

這種設置使您不必到每個排列分別代碼(很快就會變得可怕,就算只有二或三位,更不用說四位或更多位)。而不是從排列的角度考慮,你可以單獨考慮這些位,並依次在它們中的每一個上執行適當的功能。

+0

哇,這很棒!我不知道我可以像這樣打破一個字符串。它非常有幫助!它做的一件奇怪的事情是它只是簡單地閃爍LED。我使用代碼的最後一部分使其穩定。我能做點別的嗎? – user2237256

+0

@ user2237256我不確定,因爲我從來沒有真正與RPi合作過,但這聽起來像是正確的方式。 –

相關問題