2013-04-02 3 views
1

라즈베리 파이의 GPIO 출력에 연결된 4 개의 LED가 있습니다. 간단한 바이너리 코드를 사용하여 LED를 선택할 수 있도록 argv 명령을 사용하고 싶습니다. 예를 들어파이썬에서 LED 선택기를 코딩하는 데 문제가 있습니다

파이썬 test.py 1,010

이것은 행의 첫 번째 및 세 번째 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() 

나는 나머지 부분을 남겨두고이 질문을 부 풀리지 않는다. Im은 여러 가지 문법 문제를 다루지 만 Im이 이것을 스크랩해서 다른 방법으로 사용해야하는지 궁금합니다. 임 새로운 및 조언을 부탁드립니다.

답변

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

또는 3 비트, 4 가지 또는 그 이상). 순열의 관점에서 생각하기보다는 비트를 개별적으로 고려하고 각각에 대해 적절한 기능을 차례로 수행 할 수 있습니다.

+0

와우 아주 좋습니다! 나는 이런 식으로 줄을 끊을 수 있을지 전혀 몰랐다. 그것은 엄청나게 도움이되었습니다! 그 하나의 이상한 일은 LED가 매우 짧게 만 깜박이는 것입니다. 나는 당신의 코드의 마지막 부분을 꾸준히 반복했다. 나는 다른 것을 할 수 있었 을까? – user2237256

+0

@ user2237256 RPi와 함께 일한 적이 없기 때문에 확실하지 않습니다.하지만 올바른 방법이라고 생각합니다. –