<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 メニューに戻る