import RPi.GPIO as GPIO
import time
led_1=19
led_2=26
led_3=20
led_4=21

sw_1=13
sw_2=6
sw_3=5

I_1=27
I_2=17
I_3=4
I_4=24
I_5=23

O_1=22
O_2=10
O_3=9
O_4=11
O_5=0

GPIO.setmode(GPIO.BCM)

GPIO.setup(led_1, GPIO.OUT)
GPIO.setup(led_2, GPIO.OUT)
GPIO.setup(led_3, GPIO.OUT)
GPIO.setup(led_4, GPIO.OUT)
GPIO.setup(O_1, GPIO.OUT)
GPIO.setup(O_2, GPIO.OUT)
GPIO.setup(O_3, GPIO.OUT)
GPIO.setup(O_4, GPIO.OUT)
GPIO.setup(O_5, GPIO.OUT)

GPIO.setup(I_1, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(I_2, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(I_3, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(I_4, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(I_5, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(sw_1, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(sw_2, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
GPIO.setup(sw_3, GPIO.IN, pull_up_down=GPIO.PUD_OFF)

GPIO.output(led_1,GPIO.HIGH)
GPIO.output(led_2,GPIO.HIGH)
GPIO.output(led_3,GPIO.LOW)
GPIO.output(led_4,GPIO.HIGH)
GPIO.output(O_1,GPIO.HIGH)
GPIO.output(O_2,GPIO.HIGH)
GPIO.output(O_3,GPIO.HIGH)
GPIO.output(O_4,GPIO.HIGH)
GPIO.output(O_5,GPIO.HIGH)

def my_callback(channel):
    print("event on channel: "+str(channel))
    print("sw_1("+str(sw_1)+"): "+str(GPIO.input(sw_1)))
    print("sw_2("+str(sw_2)+"): "+str(GPIO.input(sw_2)))
    print("sw_3("+str(sw_3)+"): "+str(GPIO.input(sw_3)))
    print("I_1("+str(I_1)+"): "+str(GPIO.input(I_1)))
    print("I_2("+str(I_2)+"): "+str(GPIO.input(I_2)))
    print("I_3("+str(I_3)+"): "+str(GPIO.input(I_3)))
    print("I_4("+str(I_4)+"): "+str(GPIO.input(I_4)))
    print("I_5("+str(I_5)+"): "+str(GPIO.input(I_5))+"\n")


GPIO.add_event_detect(sw_1, GPIO.RISING, bouncetime=400)
GPIO.add_event_detect(sw_2, GPIO.RISING,bouncetime=400)
GPIO.add_event_detect(sw_3, GPIO.RISING, bouncetime=400)
GPIO.add_event_detect(I_1, GPIO.RISING, bouncetime=400)
GPIO.add_event_detect(I_2, GPIO.RISING,bouncetime=400)
GPIO.add_event_detect(I_3, GPIO.RISING, bouncetime=400)
GPIO.add_event_detect(I_4, GPIO.RISING, bouncetime=400)
GPIO.add_event_detect(I_5, GPIO.RISING,  bouncetime=400)

GPIO.add_event_callback(sw_1, my_callback)
GPIO.add_event_callback(sw_2, my_callback)
GPIO.add_event_callback(sw_3, my_callback)
GPIO.add_event_callback(I_1, my_callback)
GPIO.add_event_callback(I_2, my_callback)
GPIO.add_event_callback(I_3, my_callback)
GPIO.add_event_callback(I_4, my_callback)
GPIO.add_event_callback(I_5, my_callback)
try:
    while 1:
        
        time.sleep(4)
except KeyboardInterrupt:
    GPIO.cleanup()
    print("end")