相關(guān)推薦
您可能對下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138460人學(xué)過

外部中斷的使用
發(fā)布時間:2022-03-12 09:17 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 5041
1.什么是中斷?

試想一下,你正在家里吃飯,這時傳來了敲門聲,雖然你巨餓,雖然面前全是山珍海味,但此時你不得不去開門,同時不得不放停下生命中最重要的事情——吃飯。打開門后,你發(fā)現(xiàn)只是一個查水表的,你檢查了水表讀數(shù)并告訴了查水表的人。關(guān)上門,你馬不停蹄的又投入了于食物的作戰(zhàn)中。
我們來分析一下這個頗具傳奇性的故事,在這里人生的主旋律——吃飯,就是你的主程序,而敲門聲,就是一個中斷信號,它讓你不得不去執(zhí)行你的人生插曲——開門接客這個中斷函數(shù)。完成這個小插曲后,你又要投入到主線劇情 吃飯這個主程序上。

現(xiàn)在我想告訴你一個驚天秘密,其實你媽欺騙了你,你根本不是他們親生的,你是人造人,而你的大腦里裝備了一個arduino控制器!你的型號是 Arduino 吃貨,之所以叫這么2的名字,是因為你的loop的寫法問題。我們來看看你的loop函數(shù)。
[mw_shl_code=cpp,true]void loop() {
  吃();
}[/mw_shl_code]
吃,是的,你沒有看錯,你的人生是如此的幸福,就是不斷的 吃();循環(huán)
但實際上,你還有附加功能 開門();
[mw_shl_code=cpp,true]void 開門(){
打開門;
if(門口的人==女神)
    跪舔();
if(門口的人==查水表的)
    報告水表讀數(shù)();
}[/mw_shl_code]
為了讓你能順利執(zhí)行 開門();動作,你的親生父母還得在Setup函數(shù)中設(shè)置 開門();這個動作何時啟動。(也可能是你后媽設(shè)定的),具體的方法是attachInterrupt(中斷通道, 中斷函數(shù), 觸發(fā)方式); ,在這里中斷通道就是你的耳朵(不要問為什么不是屁股),觸發(fā) 開門();這個函數(shù)的方式是 敲門聲。
[mw_shl_code=cpp,true]void setup(){
  attachInterrupt(耳朵, 開門, 敲門聲);//耳朵傳感器在此不做介紹,有興趣的自行研究
}[/mw_shl_code]
這樣設(shè)定后,你每次聽到敲門聲,就不得不去打開門,并執(zhí)行相應(yīng)的動作了。
也許你對這樣的人物設(shè)定不太滿意,但這就是你的宿命,少年。

忘記你蛋碎的屌絲設(shè)定吧,我們要開始嚴(yán)肅的討論問題了 {:soso_e197:}
2.各種型號Arduino外部中斷引腳

外部中斷在不同的Arduino型號上位置也不同,只有外部中斷發(fā)生在以下端口,Arduino才能捕獲到,以下例舉了常見的幾種型號的外部中斷引腳標(biāo)號。
型號 int.0 int.1 int.2 int.3 int.4 int.5
UNO\Ethernet 2 3        
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1    
Due  所有IO口均可

3.中斷函數(shù),中斷觸發(fā)模式與設(shè)置中斷

中斷函數(shù)就是你要去執(zhí)行的函數(shù),這個函數(shù)不能帶任何參數(shù),且沒有返回類型。如:
[mw_shl_code=cpp,true]void hello()
{
  Serial.println("hello");
}[/mw_shl_code]


中斷模式就是你的中斷觸發(fā)方式。在大多數(shù)arduino上有以下四種觸發(fā)方式:
LOW                  低電平觸發(fā)
CHANGE            電平變化,高電平變低電平、低電平變高電平
RISING              上升沿觸發(fā)
FALLING            下降沿觸發(fā)
HIGH                 高電平觸發(fā)(該中斷模式僅適用于Arduino due)

在定義中斷函數(shù)后,要使用外部中斷,你只需要在程序的Setup部分配置好中斷函數(shù)即可,配置函數(shù)如下:
attachInterrupt(interrupt, function, mode);//interrupt為你中斷通道編號,function為中斷函數(shù),mode為中斷觸發(fā)模式
需要注意的是在Arduino Due中,中斷設(shè)置有點不同:
attachInterrupt(pin, function, mode); //due 的每個IO均可以進行外部中斷,所以這里第一個參數(shù)為pin,即你使用的引腳編號。
如果在程序中途,你不需要使用外部中斷了,你可以用中斷分離函數(shù)detachInterrupt(interrupt );來取消這一中斷設(shè)置。
同樣在Arduino Due上,該函數(shù)為detachInterrupt(interrupt );。

4.例程
外部中斷的使用也是非常簡單的,下面我們來看一個官方提供的例程
[mw_shl_code=cpp,true]int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);//當(dāng)int.0電平改變時,觸發(fā)中斷函數(shù)blink
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()//中斷函數(shù)
{
  state = !state;
}[/mw_shl_code]

5.應(yīng)用
利用外部中斷,可以在很多地方提高你程序的運行效率.
同時你也可以運用以上知識,使用  旋轉(zhuǎn)編碼器或者最一個 簡單監(jiān)控裝置
Arduino視頻教程基礎(chǔ)篇
我要自學(xué)網(wǎng)商城 ¥40 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138460人學(xué)過

分類選擇:
電腦辦公 平面設(shè)計 室內(nèi)設(shè)計 室外設(shè)計 機械設(shè)計 工業(yè)自動化 影視動畫 程序開發(fā) 網(wǎng)頁設(shè)計 會計課程 興趣成長 AIGC