📜  Arduino中断(1)

📅  最后修改于: 2023-12-03 15:29:27.814000             🧑  作者: Mango

Arduino中断

简介

中断是一种机制,让程序可以在不同的时间间隔内响应输入,比如按钮按下、传感器数据变更等。Arduino板支持外部中断,可用于处理这些输入。中断可以让程序更高效、更精确地响应输入。

中断类型

Arduino支持的中断类型有三种:

  1. 外部中断
  2. Pin Change中断
  3. Timer中断
外部中断

外部中断在特定的引脚上触发,用于处理电平变化(LOW或HIGH)。有两种类型的外部中断: LOW level trigger(引脚为LOW时触发)和 CHANGE trigger(引脚状态变化时触发)。

Pin Change中断

Pin Change中断不同于外部中断,不是基于引脚编号,而是基于组别编号。相比外部中断,Pin Change中断于灵活,可同时针对多个引脚进行监听。

Timer中断

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() 函数。

注意事项

中断处理函数需要从主代码分离出来,以免中断执行可能会引起的问题。中断处理函数速度需要尽可能快,中断被触发时,程序将停止执行,优先处理中断。如果中断处理函数执行时间过长,将会影响整个程序的响应速度。

参考资料
  1. Arduino Reference: https://www.arduino.cc/reference/en/language/functions/external-interrupts/
  2. Arduino Tutorial: https://www.arduino.cc/en/Tutorial/BuiltInExamples/Interrupts