<Raspberry Pi-20> Raspberry Pi-19ではLED ON/OFFをやりましたが、今回はGPIOの入力(スイッチ動作)をやってみたいと思います。 GPIO23を入力、GPIO4を出力に設定してGPIO23に接続したSW(スイッチ)操作でGPIO4に接続したLEDをON/OFFさせます。 画像をクリックして見てください。(暗くしてます) プログラムです -------------------------------------- import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT) GPIO.setup(23, GPIO.IN,GPIO.PUD_UP) #GPIO23を入力でプルアップする設定 try: while True: if GPIO.input(23)==0: #SW(GPIO23)が押されていたら次の命令を実行 GPIO.output(4,1) #GPIO4をHにする(LED点灯) else: #SW(GPIO23)が押されていないなら次の命令を実行 GPIO.output(4,0) #GPIO4をLにする(LED消灯) except KeyboardInterrupt: pass GPIO.cleanup() -------------------------------------- 上記のプログラムは、SWを押している間はONで放すとOFFになるものでしたが 次は、押して放すとON、もう一度押して放すとOFFになるトグルスイッチ動作のプログラムです。 関数も出てきます。ここでの関数の使い方はスイッチを押して、放したときにスイッチ動作を成立 させる時に便利です。 画像をクリックして見てください。(暗くしてます) プログラムです ----------------------------------------------- import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT,GPIO.LOW) #GPIO4を出力、そして出力をLに設定 GPIO.setup(23, GPIO.IN,GPIO.PUD_UP) cnt=0 def push1(): #関数push1() global cnt #関数内でグローバル変数にしないとcnt値が反映しない cnt=cnt+1 #cnt値を1加算 return #省略可能ですが、関数の終わり目印的に書いている def push2(): global cnt cnt=cnt+1 return def push3(): global cnt cnt=cnt+1 return try: while True: if GPIO.input(23)==0 and cnt==0: #2つの条件が成立したとき下の命令を実行 push1() #関数の呼出し print "cnt=",cnt #Python Shell画面に表示させる if GPIO.input(23)==1 and cnt==1: GPIO.output(4,1) push2() print "cnt=",cnt if GPIO.input(23)==0 and cnt==2: push3() print "cnt=",cnt if GPIO.input(23)==1 and cnt==3: GPIO.output(4,0) cnt=0 print "cnt=",cnt except KeyboardInterrupt: pass GPIO.cleanup() ----------------------------------------------- 次はSWを押すと、LEDが3回点滅して終了します。新しいモジュールsysが出てきます。 これは、CTRL+Cでプログラムを終了させるのでなく、プログラム実行後に終了させる ときに使います。それとfor文も出てきます。 画像をクリックして見てください。 プログラムです ----------------------------------------------- # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from time import sleep import sys #sysをインポート GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT,GPIO.LOW) GPIO.setup(23, GPIO.IN,GPIO.PUD_UP) cnt=0 def push1(): global cnt cnt=cnt+1 return def push2(): global cnt cnt=cnt+1 return while True: if GPIO.input(23)==0 and cnt==0: push1() print "cnt=",cnt #プログラムの確認用 if GPIO.input(23)==1 and cnt==1: push2() print "cnt=",cnt #プログラムの確認用 if cnt==2: for n in range(3): #renge(3)で3回繰返す、0,1,2が変数nに順番に代入 GPIO.output(4,GPIO.HIGH) sleep(0.5) GPIO.output(4,GPIO.LOW) sleep(0.5) print "n=",n if n==2: #nが2なら下の命令を実行 GPIO.cleanup() print "終了" sys.exit() #プログラム終了 ----------------------------------------------- sys.exit()がある時、ない時の終了メッセージ Raspberry Pi-21に続く・・・ Raspberry メニューに戻る