樹莓派 Learning 003 — GPIO 003 中斷模式 — 按鍵控制LED
阿新 • • 發佈:2019-01-28
我的樹莓派型號: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()
程式碼講解:
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才會執行這個中斷裡面的程式。
這就是軟體去抖。