button_1_callback, ... , buttono_8_callback 로 정의된 동일한 패턴의 함수를 더 간단하게 하는 방법

조회수 422회

실행돌려보면 오류가 나오는데 더이상 진행이안되서 도움을 구합니다. 뭐가 잘못된건지 모르겠어서 알려주시거나 수정해주시면 감사하겠습니다.


import RPi.GPIO as GPIO  #GPIO 라이브러리 불러오기

import time   #시간 라이브러리 불러오기

import datetime

 #I/O 리스트로 지정

IO_do = [22,6,13,19,26,11,27,4]

IO_di = [17,12,16,21,20,18,23,24]

Num = [1,2,3,4,5,6,7,8]

 #불필요한 WARNING 제거

GPIO.setwarnings(False)

 #GPIO 핀의 번호모드 설정

GPIO.setmode(GPIO.BCM)

 #버튼 리스트 변수를 INPUT설정,PULLDOWN 저항 설정

for i in IO_di:

    GPIO.setup([i], GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 

 #LED 리스트 변수를 OUTPUT설정

for j in IO_do:

    GPIO.setup([j], GPIO.OUT)


 #boolean 변수설정

light_ons = [ False for _ in range(8)]

 #프로그램 시작을 알림

print("start")

 #버튼 콜백 함수를 정의함 글로벌 함수 적용

def button_callback_(ch):

    print(ch)
    global light_ons
    if light_ons[i] == False:
        GPIO.output(IO_do[i], 1)
        print("LED%d ON"%(i+1))
    else:
        GPIO.output(IO_do[i], 0)
        print("LED%d OFF"%(i+1))
    light_ons[i] = not light_ons[i]


 # 이벤트 알림 방식 버튼핀의 Rising신호를 감지하면 콜백함수를 실행

 # 바운스타임을 설정하여 잘못된 신호를 방지합니다.

for i in Num:

    GPIO.add_event_detect(IO_di[i],GPIO.RISING,callback=button_callback(i), bouncetime=300)


while 1:

    time.sleep(0.1) 

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)