天天看点

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、应用:利用外部中断,可以在很多地方提高你程序的运行效率。你可以运用以上知识,做一个简单的监控装置。