日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arduino文档阅读笔记-attachInterrupt()

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arduino文档阅读笔记-attachInterrupt() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

attachInTerrupt()

有這個專業詞要知道:

Digital Pins:電子引腳

ISRs(Interrupt Service Routines):中斷服務程序

ISR(Interrupt Service Routine):中斷服務程序

?

attachInTerrupt()第一個參數為中斷的引腳號,一般使用digitalPinToInterrupt(pin)去設置。比如如果使用中斷引腳3,首先使用digitalPinToInterrupt(3),然后將其傳入attachInterrupt()

下面是各個板子對應的引腳號:

需要注意的地方:

在中斷函數里面delay()函數是不會工作的,millis()返回值不會增加,串口接收的數據可能會丟失,如果在中斷函數中要修改全局變量,需要把全局變量聲明中添加volatile關鍵字。

?

使用中斷的目的,就是為了更好的寫程序。這樣程序就不要用輪詢,不停的問,而是中斷一來就停止手上的工作,從而直接進行中斷函數的響應。

?

關于中斷服務程序(About Interrupt Service Routines)

ISR我個人覺得更正確的翻譯為中斷服務函數。ISR比較特殊,不能有參數和返回值,也不返回任何數據。

這里有幾點要注意的:

如果同時有多個ISR被觸發,只有一個ISP會被響應,這依賴于他們的優先級。delay()和millis()是不能用的,millis()他依賴于中斷計時器(這里就和寫C/C++的時候統計程序運行時間,在運行時間里面調用windows.h中的sleep,這個調用后連統計時間的函數都會被sleep掉)micros在前1-2ms是正常的,之后就不正常了。官方推薦在中斷函數中使用delayMicroseconds()這個函數。

在ISR中一般使用全局變量進行操作,在全局變量中要添加volatile關鍵字。

?

這些函數都是異步的操作:

關于參數:

下面是官方給出的示例代碼:

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; }

?

?

總結

以上是生活随笔為你收集整理的Arduino文档阅读笔记-attachInterrupt()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。