中断介绍
“中断”顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序。当中断服务程序完成以后,再回来继续执行刚才执行的事情。中断服务程序对监测Arduino输入有很大的用处。
Arduino控制板 支持中断的引脚
Arduino控制板 | 支持中断的引脚 |
---|---|
Uno, Nano, Mini | 2, 3 |
Mega, Mega2560, MegaADK | 2, 3, 18, 19, 20, 21 |
Micro, Leonardo | 0, 1, 2, 3, 7 |
Zero | 除4号引脚以外的所有数字引脚 |
MKR1000 Rev.1 | 0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
Due | 所有数字引脚 |
中断函数说明
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
参数interruptNum;支持中断的编号从0开始例如nano有两个中断引脚分别为D2、D3 如果使用D2就填0,D3填1
userFunc; 是函数指针就是你的中断函数。
mode; 是中断触发方式 参考如下
low 当引脚为低电平时触发
change 当引脚高低变化时触发
rising 当引脚由低电平变高电平时触发
falling 当引脚由高变低时触发
实验一
按键(中断)切换led显示状态
代码
// 记录电平状态
int state = 0;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
attachInterrupt(0, myInterruptFunc, RISING); // 当电平由低变高触发中断函数
}
void loop()
{
digitalWrite(LED_BUILTIN,state); // 设置电平
}
// 中断函数 D2口由低电平到高电平时触发
void myInterruptFunc()
{
state = ~state; // 更改电平状态
}
实验二
中断触发 led1点亮1s之后关掉 然后led2闪烁
接线
引脚 | 原件 |
---|---|
D2 | 按键 |
D13 | 板载LED1 |
D3 | LED2 |
注意;代码中并没有使用上拉输入功能 D2需要外接1000ohm上拉电阻也就是默认给与低电平。
代码
int state = 0;
int LED1 = LED_BUILTIN;
int LED2 = PD3;
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
attachInterrupt(0, myInterruptFunc, RISING); // 当电平由低变高触发中断函数
digitalWrite(LED2, HIGH); // LED2设置高电平 关掉
}
void loop()
{
if (state == 1)
{
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
state = 2;
}
else if(state == 2)
{
digitalWrite(LED2, LOW);
delay(300);
digitalWrite(LED2, HIGH);
delay(300);
digitalWrite(LED2, LOW);
delay(300);
digitalWrite(LED2, HIGH);
state = 0;
}
}
// 中断函数
void myInterruptFunc()
{
state = 1;
}
演示1.jpg
由于没有GIF静态图将就看吧实际动手就能看到效果了 可以参考下我的接线。
网友评论