コンテンツにスキップ

チャッタリング対策

ボタンを押すとチャッタリングが発生してボタンが連打したことになります。ボタン立ち上がりを検出してしばらく立ってボタンの判定します。

サンプルコードの動作

ボタンを押すとLEDが光、赤、緑、青、白の順番で光ます。ボタン、LEDはローアクティブです。

サンプルコード使用時の接続

GPIO4にボタンを接続、GPIO 5,6,22にはカラーLEDを接続。

サンプルコード

import RPi.GPIO as GPIO
import time

LEDPIN_R = 5
LEDPIN_G = 6
LEDPIN_B = 22
BUTTONPIN = 4
count = 0

GPIO.setmode(GPIO.BCM)
GPIO.setup(LEDPIN_R, GPIO.OUT)
GPIO.setup(LEDPIN_G, GPIO.OUT)
GPIO.setup(LEDPIN_B, GPIO.OUT)
GPIO.setup(BUTTONPIN, GPIO.IN)

def event_callback(gpio_pin):
    global count
    count += 1
    if (count == 1):
            GPIO.output(LEDPIN_R, False)
            GPIO.output(LEDPIN_G, True)
            GPIO.output(LEDPIN_B, True)
    elif(count == 2):
            GPIO.output(LEDPIN_R, True)
            GPIO.output(LEDPIN_G, False)
            GPIO.output(LEDPIN_B, True)
    elif(count == 3):
            GPIO.output(LEDPIN_R, True)
            GPIO.output(LEDPIN_G, True)
            GPIO.output(LEDPIN_B, False)
    elif(count == 4):
            GPIO.output(LEDPIN_R, False)
            GPIO.output(LEDPIN_G, False)
            GPIO.output(LEDPIN_B, False)
    else:
        GPIO.output(LEDPIN_R, True)
        GPIO.output(LEDPIN_G, True)
        GPIO.output(LEDPIN_B, True)
        count = 0

GPIO.add_event_detect(4, GPIO.RISING, callback=event_callback, bouncetime=200)

try:
    while True:
        time.sleep(1)

except KeyboardInterrupt:
    print ('終了')
    GPIO.remove_event_detect(4)
    GPIO.cleanup()