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