밑의 코딩에서 list함수를 이용하여 코딩을 더줄일수 있는 방법이 없을까요? 없거나 비효율 적이면 다른함수를 사용하는 방법을 알려주실수있나요?
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_1_on = False
light_2_on = False
light_3_on = False
light_4_on = False
light_5_on = False
light_6_on = False
light_7_on = False
light_8_on = False
#프로그램 시작을 알림
print("start")
#버튼 콜백 함수를 정의함 글로벌 함수 적용
def button_1_callback(ch):
global light_1_on
if light_1_on == False:
GPIO.output(IO_do[0],1)
print("LED1 ON")
else:
GPIO.output(IO_do[0],0)
print("LED1 OFF")
light_1_on = not light_1_on
def button_2_callback(ch):
global light_2_on
if light_2_on == False:
GPIO.output(IO_do[1],1)
print("LED2 ON")
else:
GPIO.output(IO_do[1],0)
print("LED2 OFF")
light_2_on = not light_2_on
def button_3_callback(ch):
global light_3_on
if light_3_on == False:
GPIO.output(IO_do[2],1)
print("LED3 ON")
else:
GPIO.output(IO_do[2],0)
print("LED3 OFF")
light_3_on = not light_3_on
def button_4_callback(ch):
print(ch)
global light_4_on
if light_4_on == False:
GPIO.output(IO_do[3],1)
print("LED4 ON")
else:
GPIO.output(IO_do[3],0)
print("LED4 OFF")
light_4_on = not light_4_on
def button_5_callback(ch):
print(ch)
global light_5_on
if light_5_on == False:
GPIO.output(IO_do[4],1)
print("LED5 ON")
else:
GPIO.output(IO_do[4],0)
print("LED5 OFF")
light_5_on = not light_5_on
def button_6_callback(ch):
print(ch)
global light_6_on
if light_6_on == False:
GPIO.output(IO_do[5],1)
print("LED6 ON")
else:
GPIO.output(IO_do[5],0)
print("LED6 OFF")
light_6_on = not light_6_on
def button_7_callback(ch):
print(ch)
global light_7_on
if light_7_on == False:
GPIO.output(IO_do[6],1)
print("LED7 ON")
else:
GPIO.output(IO_do[6],0)
print("LED7 OFF")
light_7_on = not light_7_on
def button_8_callback(ch):
print(ch)
global light_8_on
if light_8_on == False:
GPIO.output(IO_do[7],1)
print("LED8 ON")
else:
GPIO.output(IO_do[7],0)
print("LED8 OFF")
light_8_on = not light_8_on
# 이벤트 알림 방식 버튼핀의 Rising신호를 감지하면 콜백함수를 실행
# 바운스타임을 설정하여 잘못된 신호를 방지합니다.
GPIO.add_event_detect(IO_di[0],GPIO.RISING,callback=button_1_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[1],GPIO.RISING,callback=button_2_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[2],GPIO.RISING,callback=button_3_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[3],GPIO.RISING,callback=button_4_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[4],GPIO.RISING,callback=button_5_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[5],GPIO.RISING,callback=button_6_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[6],GPIO.RISING,callback=button_7_callback, bouncetime=300)
GPIO.add_event_detect(IO_di[7],GPIO.RISING,callback=button_8_callback, bouncetime=300)
while 1:
time.sleep(0.1)