AttachInterrupt()

來自ALSROBOT WiKi
2014年9月12日 (五) 17:17Admin討論 | 貢獻(xiàn)的版本

(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、 搜索
void attachInterrupt (uint8_t interruptNum, void(*)(void)userFunc, int mode)

設(shè)置中斷

指定中斷函數(shù). 外部中斷有0和1兩種, 一般對應(yīng)2號和3號數(shù)字引腳.


引腳說明(interruptNum):
Uno/Nano/Mega上

  • 中斷0腳就是D2
  • 中斷1腳就是D3


參數(shù):

  • interrupt 中斷類型, 0或1
  • fun 對應(yīng)函數(shù)
  • mode 觸發(fā)方式. 有以下幾種:
    • LOW 低電平觸發(fā)中斷
    • CHANGE 變化時(shí)觸發(fā)中斷
    • RISING 低電平變?yōu)楦唠娖接|發(fā)中斷
    • FALLING 高電平變?yōu)榈碗娖接|發(fā)中斷


注解:
在中斷函數(shù)中 delay 函數(shù)不能使用, millis 始終返回進(jìn)入中斷前的值. 讀串口數(shù)據(jù)的話, 可能會(huì)丟失. 中斷函數(shù)中使用的變量需要定義為 volatile 類型.
下面的例子如果通過外部引腳觸發(fā)中斷函數(shù), 然后控制LED的閃爍.

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

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

void blink()
{
  state = !state;
}