1. 程式人生 > >樹莓派 Learning 003 — GPIO 003 中斷模式 — 按鍵控制LED

樹莓派 Learning 003 — GPIO 003 中斷模式 — 按鍵控制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()

程式碼講解:

  • 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才會執行這個中斷裡面的程式。

這就是軟體去抖。

搞定