在Arduino中,中断是一种机制,允许程序在发生特定事件时立即响应,而无需等待这些事件的轮询。Arduino支持多种类型的中断,包括外部硬件中断和定时器中断。

以下是一个简单的例子,演示如何在Arduino中使用外部硬件中断。假设我们想在按钮按下时触发中断:
const int buttonPin = 2;  // 按钮连接到数字引脚2
volatile int buttonState = LOW;  // 按钮状态,使用 volatile 修饰符表示该变量在中断中使用

void setup() {
  pinMode(buttonPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(buttonPin), interruptFunction, RISING);
  Serial.begin(9600);
}

void loop() {
  // 主循环中可以执行其他任务
}

void interruptFunction() {
  // 中断服务程序
  buttonState = !buttonState;  // 切换按钮状态
  Serial.println("Button pressed!");
  Serial.print("Button state: ");
  Serial.println(buttonState);
}

在上述例子中:

  •  attachInterrupt(digitalPinToInterrupt(buttonPin), interruptFunction, RISING); 用于将中断函数 interruptFunction 关联到按钮引脚,并设置触发条件为上升沿(按下按钮时引脚从LOW变为HIGH)。

  •  volatile 关键字用于告诉编译器,buttonState 变量可能在中断中被修改,因此编译器不应该对其进行优化。


请注意,中断服务程序应该尽可能短小,以允许系统尽快回到正常执行。在中断服务程序中,最好避免使用延时函数和复杂的操作。

这只是一个基本的例子,实际中断的应用可能更加复杂,取决于你的具体需求。如果你需要定时器中断等其他类型的中断,也可以使用类似的方法。


转载请注明出处:http://www.pingtaimeng.com/article/detail/10985/Arduino