Arduino文档阅读笔记-attachInterrupt()
attachInTerrupt()
有這個專業(yè)詞要知道:
Digital Pins:電子引腳
ISRs(Interrupt Service Routines):中斷服務(wù)程序
ISR(Interrupt Service Routine):中斷服務(wù)程序
?
attachInTerrupt()第一個參數(shù)為中斷的引腳號,一般使用digitalPinToInterrupt(pin)去設(shè)置。比如如果使用中斷引腳3,首先使用digitalPinToInterrupt(3),然后將其傳入attachInterrupt()
下面是各個板子對應(yīng)的引腳號:
需要注意的地方:
在中斷函數(shù)里面delay()函數(shù)是不會工作的,millis()返回值不會增加,串口接收的數(shù)據(jù)可能會丟失,如果在中斷函數(shù)中要修改全局變量,需要把全局變量聲明中添加volatile關(guān)鍵字。
?
使用中斷的目的,就是為了更好的寫程序。這樣程序就不要用輪詢,不停的問,而是中斷一來就停止手上的工作,從而直接進(jìn)行中斷函數(shù)的響應(yīng)。
?
關(guān)于中斷服務(wù)程序(About Interrupt Service Routines)
ISR我個人覺得更正確的翻譯為中斷服務(wù)函數(shù)。ISR比較特殊,不能有參數(shù)和返回值,也不返回任何數(shù)據(jù)。
這里有幾點要注意的:
如果同時有多個ISR被觸發(fā),只有一個ISP會被響應(yīng),這依賴于他們的優(yōu)先級。delay()和millis()是不能用的,millis()他依賴于中斷計時器(這里就和寫C/C++的時候統(tǒng)計程序運(yùn)行時間,在運(yùn)行時間里面調(diào)用windows.h中的sleep,這個調(diào)用后連統(tǒng)計時間的函數(shù)都會被sleep掉)micros在前1-2ms是正常的,之后就不正常了。官方推薦在中斷函數(shù)中使用delayMicroseconds()這個函數(shù)。
在ISR中一般使用全局變量進(jìn)行操作,在全局變量中要添加volatile關(guān)鍵字。
?
這些函數(shù)都是異步的操作:
關(guān)于參數(shù):
下面是官方給出的示例代碼:
const byte ledPin = 13; const byte interruptPin = 2; volatile byte state = LOW;void setup() {pinMode(ledPin, OUTPUT);pinMode(interruptPin, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); }void loop() {digitalWrite(ledPin, state); }void blink() {state = !state; }?
?
總結(jié)
以上是生活随笔為你收集整理的Arduino文档阅读笔记-attachInterrupt()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考网络工程师笔记-综合知识3
- 下一篇: SoapUI笔记-使用SoapUI测试W