原博文鏈接在我的官方網站,網址是: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 ledStatus
:http://c.biancheng.net/cpp/html/1827.htmlGPIO.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/