樹莓派 Learning 003 — GPIO 003 中斷模式 — 按鍵控制LED

原博文鏈接在我的官方網站,網址是:http://www.aobosir.com/blog/2017/03/08/raspberrypi-GPIO-interrupted-key-control-led/


我的樹莓派型號:Raspberry Pi 2 Model B V1.1
裝機系統:NOOBS v1.9.2


# -*- coding:UTF-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(24, GPIO.IN, pull_up_dwon=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)

ledStatus = True

def my_callback(channel):
    print("button pressed!")
    global ledStatus
    ledStatus = not ledStatus
    if ledStatus:
        GPIO.output(25, GPIO.HIGH)
        pass
    else:
        GPIO.output(25, GPIO.LOW)
        pass
    pass

GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

while True:
    try:
        print("I'm working...")
        time.sleep(5)
        pass
    except KeyboardInterrupt:
        break
        pass
    pass

GPIO.cleanup()

代碼講解:

  • global ledStatushttp://c.biancheng.net/cpp/html/1827.html
  • GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback) :給24引腳添加一個事件函數,觸發條件是:捕獲到上升沿(GPIO.RISING)。這個參數還可以是:GPIO.FALLING(下降沿)、GPIO.BOTH(兩者都有)
  • except KeyboardInterrupt: 是用來捕獲用戶是否按了Ctrl + C 組合鍵。退出程序
  • GPIO.cleanup():之前都沒有使用過這個函數。這個函數的功能是:jaingaobo所有的GPIO還原回初始輸入狀態。我們建議在使用RPi.GPIO模塊的所有Python程序的最後,都寫上這個函數。

現在這個程序我們來運行一下:

sudo chmod +x key_control_led_callback.py
python key_control_led_callback.py

現在的運行效果就已經很好的,即使我們上面寫的程序腳本里面沒有編寫按鍵去抖的相關程序,並且我們也沒有安裝硬件去抖的電容。但是爲了安全起見,我們還是應該擺去抖的程序給它加上。

對於中斷模式的檢測按鍵,我們給這種程序添加去抖程序,相當的簡單,我們只需要將上面的程序中的這行語句:

GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

修改爲:

GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200)

其中bouncetime=200 是延時200ms的意思。就是當檢測到上升沿後,進入這個中斷,要延時200ms纔會執行這個中斷裏面的程序。

這就是軟件去抖。


搞定


參考網站:https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

更多精彩的博文,請訪問:http://www.aobosir.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章