原文地址:
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、應用:利用外部中斷,可以在很多地方提高你程序的運行效率。你可以運用以上知識,做一個簡單的監控裝置。