Arduino - 中斷的使用

原文地址:
http://www.arduino.cn/forum.php?mod=viewthread&tid=2421&page=1#pid8221

1、什麼是中斷? (這裏就不多解釋了,主要講一下具體使用)

2、各種板子的中斷:UNO、NANO、ProMINI這仨板子都是INT0(D2針腳:中斷編號爲0)、INT1(D3針腳:中斷編號爲1),其它板子參考電路圖。

3、中斷函數、中斷觸發模式與設置中斷 

【中斷函數】:就是你要去執行的函數,這個函數不能帶任何參數,且沒有返回類型。

如:

void hello()
{
  Serial.println("hello");
}

【中斷模式】:就是你的中斷觸發方式。在大多數arduino上有以下四種觸發方式:

LOW               低電平觸發
CHANGE            電平變化,高電平變低電平、低電平變高電平
RISING            上升沿觸發
FALLING           下降沿觸發
HIGH              高電平觸發(該中斷模式僅適用於Arduino due)

【設置中斷】:在定義中斷函數後,要使用外部中斷,你只需要在程序的Setup部分配置好中斷函數即可,配置函數如下:

attachInterrupt(interrupt, function, mode); //interrupt爲你中斷通道編號,function爲中斷函數,mode爲中斷觸發模式

需要注意的是在Arduino Due中,中斷設置有點不同:

attachInterrupt(pin, function, mode); //due 的每個IO均可以進行外部中斷,所以這裏第一個參數爲pin,即你使用的引腳編號。

如果在程序中途,你不需要使用外部中斷了,你可以用中斷分離函數來取消這一中斷設置:
detachInterrupt(interrupt); 
同樣在Arduino Due上,該函數爲detachInterrupt(Pin);。

4、例程:
外部中斷的使用也是非常簡單的,下面我們來看一個官方提供的例程

int pin = 13;
volatile int state = LOW;

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

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

void blink()//中斷函數
{
  state = !state;
}

5、應用:利用外部中斷,可以在很多地方提高你程序的運行效率。你可以運用以上知識,做一個簡單的監控裝置。
發佈了49 篇原創文章 · 獲贊 161 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章