天天看點

Arduino 中斷和睡眠狀态初步嘗試_2

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

繼續閱讀