一、前言
前面兩節(jié)介紹了LED燈和按鍵輸入,那么這一講就基于按鍵學(xué)習(xí)一下外部中斷,目標(biāo)是通過(guò)按鍵控制LED開燈和關(guān)燈。
二、硬件連接
連接好按鍵和LED燈,不懂的同學(xué)可以先看下前兩節(jié)的內(nèi)容,硬件原理就不多做介紹了,樹莓派和單片機(jī)有所區(qū)別,對(duì)于樹莓派編程來(lái)說(shuō),我們更多的是做上層的應(yīng)用,下層驅(qū)動(dòng)的實(shí)現(xiàn)不會(huì)花太多的時(shí)間去研究。
三、編寫代碼并運(yùn)行
示例代碼如下:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import RPi.GPIO as GPIO #導(dǎo)入RPi.GPIO庫(kù)
import time #導(dǎo)入time庫(kù)
LED = 26 #LED引腳號(hào)
KEY = 20 #按鍵引腳號(hào)
GPIO.setwarnings(False) #不加這句會(huì)有警告,因?yàn)樵撘_已經(jīng)被設(shè)置成了非默認(rèn)值(也可以不加,不影響正常使用)
GPIO.setmode(GPIO.BCM) #使用BCM編碼的引腳號(hào)
GPIO.setup(LED,GPIO.OUT) #配置LED引腳模式
GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP) #設(shè)置KEY引腳模式
global led_status #記錄LED電平狀態(tài)(全局變量)
led_status = 0
def KEYInterrupt(KEY): #外部中斷服務(wù)函數(shù)
global led_status
if led_status :
GPIO.output(LED,GPIO.LOW) #關(guān)燈
print("LED OFF")
led_status = 0
else :
GPIO.output(LED,GPIO.HIGH) #開燈
print("LED ON")
led_status = 1
GPIO.add_event_detect(KEY,GPIO.FALLING,KEYInterrupt,200) #KEY:按鍵引腳號(hào),GPIO.FALLING:下降沿模式,KEYInterrupt:中斷服務(wù)函數(shù),200:消抖時(shí)間(ms)
while True:
time.sleep(1)
運(yùn)行結(jié)果:
按鍵按下,LED點(diǎn)亮,打印“LED ON”。再按一次,LED熄滅,打印“LED OFF”。
四、結(jié)束語(yǔ)
這一講結(jié)合了LED和KEY介紹了樹莓派外部中斷的使用,功能比較簡(jiǎn)單,但是很實(shí)用。好了,這一講的內(nèi)容就這么多了,想了解更多樹莓派的知識(shí)可以關(guān)注我,后續(xù)我會(huì)繼續(xù)更新更多的教程。