📅  最后修改于: 2023-12-03 15:29:27.814000             🧑  作者: Mango
中断是一种机制,让程序可以在不同的时间间隔内响应输入,比如按钮按下、传感器数据变更等。Arduino板支持外部中断,可用于处理这些输入。中断可以让程序更高效、更精确地响应输入。
Arduino支持的中断类型有三种:
外部中断在特定的引脚上触发,用于处理电平变化(LOW或HIGH)。有两种类型的外部中断: LOW level trigger(引脚为LOW时触发)和 CHANGE trigger(引脚状态变化时触发)。
Pin Change中断不同于外部中断,不是基于引脚编号,而是基于组别编号。相比外部中断,Pin Change中断于灵活,可同时针对多个引脚进行监听。
Timer中断是周期性触发的,是通过定时器来调用的,适用于周期性的任务执行。
以下是一个外部中断的例子:
// 引脚2为中断引脚
const int interruptPin = 2;
volatile int state = LOW; // 定义一个状态标志变量,volatile修饰符表示变量的值可能被更改
void setup() {
pinMode(interruptPin, INPUT_PULLUP); // 设置中断引脚
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); // 建立中断处理函数
}
void loop() {
// do something
}
void blink() {
state = !state; // 中断执行的操作
}
以上代码中,我们使用 attachInterrupt()
函数建立中断处理函数 blink()
,监听引脚的状态变化,当引脚状态变化时,将调用 blink()
函数。在 loop()
函数中,我们可以进行其他操作,而外部中断会在中断发生时执行 blink()
函数。
中断处理函数需要从主代码分离出来,以免中断执行可能会引起的问题。中断处理函数速度需要尽可能快,中断被触发时,程序将停止执行,优先处理中断。如果中断处理函数执行时间过长,将会影响整个程序的响应速度。