<Raspberry Pi-21> 続いてGPIOの入力(スイッチ動作)をやってみたいと思います。 SWを3個、LEDを3個準備して、GPIO4→LED4、GPIO5→LED5、GPIO4→LED6 GPIO23→SW23、GPIO24→SW24、GPIO23→SW25として接続します。 LEDを接続には抵抗1.8KΩを接続します(電流制限のため) このプログラムは、早押しボタンもどきです。一番早く押したSWに対応するLEDを点灯させます。 点灯したLEDは5秒で消灯して、次の早押し待機になります。 点灯している5秒間は、ほかのSWを押してもそのSW対応のLEDは点灯しません。 画像をクリックして見てください。 プログラムです ---------------------------------------------------------------------- # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT,GPIO.LOW) GPIO.setup(23, GPIO.IN,GPIO.PUD_UP) GPIO.setup(5,GPIO.OUT,GPIO.LOW) GPIO.setup(24, GPIO.IN,GPIO.PUD_UP) GPIO.setup(6,GPIO.OUT,GPIO.LOW) GPIO.setup(25, GPIO.IN,GPIO.PUD_UP) flug1=0 flug2=0 flug3=0 GPIO.output(4,GPIO.LOW) GPIO.output(5,GPIO.LOW) GPIO.output(6,GPIO.LOW) def push1_1(): global flug1 flug1=1 return def push1_2(): global flug1 flug1=0 return def push2_1(): global flug2 flug2=1 return def push2_2(): global flug2 flug2=0 return def push3_1(): global flug3 flug3=1 return def push3_2(): global flug3 flug3=0 return try: while True: if GPIO.input(23)==0 and flug1==0 and flug2==0 and flug3==0: GPIO.output(4,GPIO.HIGH) push1_1() print "sw23が最初に押されました" if GPIO.input(23)==1 and flug1==1: push1_2() time.sleep(5) GPIO.output(4,GPIO.LOW) if GPIO.input(24)==0 and flug1==0 and flug2==0 and flug3==0: GPIO.output(5,GPIO.HIGH) push2_1() print "sw24が最初に押されました" if GPIO.input(24)==1 and flug2==1: push2_2() time.sleep(5) GPIO.output(5,GPIO.LOW) if GPIO.input(25)==0 and flug1==0 and flug2==0 and flug3==0: GPIO.output(6,GPIO.HIGH) push3_1() print "sw25が最初に押されました" if GPIO.input(25)==1 and flug3==1: push3_2() time.sleep(5) GPIO.output(6,GPIO.LOW) except KeyboardInterrupt: pass GPIO.cleanup() ---------------------------------------------------------------------- 次は、3つのSWに対応したLEDのON/OFFです。 画像をクリックして見てください。 プログラムです ---------------------------------------------------------------------- # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT,GPIO.LOW) GPIO.setup(23, GPIO.IN,GPIO.PUD_UP) GPIO.setup(5,GPIO.OUT,GPIO.LOW) GPIO.setup(24, GPIO.IN,GPIO.PUD_UP) GPIO.setup(6,GPIO.OUT,GPIO.LOW) GPIO.setup(25, GPIO.IN,GPIO.PUD_UP) GPIO.output(4,GPIO.LOW) GPIO.output(5,GPIO.LOW) GPIO.output(6,GPIO.LOW) flug1=0 flug2=0 flug3=0 def r_led(): GPIO.output(4,1) sleep(0.5) GPIO.output(4,0) GPIO.output(5,1) sleep(0.5) GPIO.output(5,0) GPIO.output(6,1) sleep(0.5) GPIO.output(6,0) return def l_led(): GPIO.output(6,1) sleep(0.5) GPIO.output(6,0) GPIO.output(5,1) sleep(0.5) GPIO.output(5,0) GPIO.output(4,1) sleep(0.5) GPIO.output(4,0) return def on_led(): GPIO.output(4,1) GPIO.output(5,1) GPIO.output(6,1) return def off_led(): GPIO.output(4,0) GPIO.output(5,0) GPIO.output(6,0) return def push1_1(): global flug1 flug1=1 for n in range(3): r_led() return def push1_2(): global flug1 flug1=0 GPIO.output(4,0) return def push2_1(): global flug2 flug2=1 for n in range(3): r_led() sleep(0.5) l_led() sleep(0.5) return def push2_2(): global flug2 flug2=0 return def push3_1(): global flug3 flug3=1 r_led() sleep(0.5) r_led() sleep(0.5) l_led() sleep(0.5) for n in range(3): on_led() sleep(0.3) off_led() sleep(0.3) return def push3_2(): global flug3 flug3=0 return try: while True: if GPIO.input(23)==0 and flug1==0 and flug2==0 and flug3==0: print "sw23パターンです" push1_1() if GPIO.input(23)==1 and flug1==1: push1_2() sleep(1) GPIO.output(4,GPIO.LOW) if GPIO.input(24)==0 and flug1==0 and flug2==0 and flug3==0: print "sw24パターンです" push2_1() if GPIO.input(24)==1 and flug2==1: push2_2() sleep(1) GPIO.output(5,GPIO.LOW) if GPIO.input(25)==0 and flug1==0 and flug2==0 and flug3==0: print "sw25パターンです" push3_1() if GPIO.input(25)==1 and flug3==1: push3_2() sleep(1) GPIO.output(6,GPIO.LOW) except KeyboardInterrupt: pass GPIO.cleanup() ---------------------------------------------------------------------- Raspberry Pi-22に続く・・・ Raspberry メニューに戻る