什么是中断

arduino中断函数示例(arduino的中断)(1)

UNO中断

内部中断

外部中断

函数列表


attachInterrupt()函数说明

void attachInterrupt (uint8_t interruptNum, void(*)(void)userFunc, int mode)

设置中断

指定中断函数. 外部中断有0和1两种, 一般对应2号和3号数字引脚.

参数:

interrupt 中断类型, 0或1 fun 对应函数 mode 触发方式. 有以下几种: LOW 低电平触发中断 CHANGE 变化时触发中断 RISING 低电平变为高电平触发中断 FALLING 高电平变为低电平触发中断

注解:

在中断函数中 delay 函数不能使用, millis 始终返回进入中断前的值. 读串口数据的话, 可能会丢失. 中断函数中使用的变量需要定义为 volatile 类型.

下面的例子如果通过外部引脚触发中断函数, 然后控制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; }


detachInterrupt()函数说明

void detachInterrupt (uint8_t interruptNum)

取消中断

取消指定类型的中断.

参数:

interrupt 中断的类型.


interrupts()函数说明

#define interrupts() sei()

开中断

例子:

void setup() {} void loop() { noInterrupts(); // critical, time-sensitive code here interrupts(); // other code here }


noInterrupts()函数说明

#define noInterrupts() cli()

关中断

例子:

void setup() {} void loop() { noInterrupts(); // critical, time-sensitive code here interrupts(); // other code here }

实验——按键实现外部中断

实验器材

实验实现

按键按下,串口显示器显示“KEY DOWM”

按键松开,串口显示器显示“KEY UP”

实验连线图

arduino中断函数示例(arduino的中断)(2)

代码实现

int pinInterrupt = 2; //接中断信号的脚 void onChange() { if ( digitalRead(pinInterrupt) == LOW ) Serial.println("Key Down"); else Serial.println("Key UP"); } void setup() { Serial.begin(9600); //打开串口 pinMode( pinInterrupt, INPUT); //设置管脚为输入 //Enable中断管脚, 中断服务程序为onChange(), 监视引脚变化 attachInterrupt( digitalPinToInterrupt(pinInterrupt), onChange, CHANGE); } void loop() { // 模拟长时间运行的进程或复杂的任务。 delay(1000); }

实验结果

arduino中断函数示例(arduino的中断)(3)

,