中断Interrupts会停止Arduino当前的工作,以便可以完成其他工作。
主程序正在运行并在电路中执行某些函数,但是,当发生中断时,主程序将暂停,同时执行另一个例程,该例程完成后,处理器将再次返回主例程。
链接:https://www.learnfk.comhttps://www.learnfk.com/arduino/arduino-interrupts.html
来源:LearnFk无涯教程网
有两种类型的中断-
硬件中断 - 它们是响应外部事件而发生的,例如外部中断引脚变高或变低。
软件中断 - 它们是响应软件中发送的指令而发生的,支持的唯一中断类型是attachInterrupt()函数。
中断在Arduino程序中非常有用,因为它有助于解决时序问题,中断的一个很好的应用是读取旋转编码器或观察用户输入。
通常,全局变量用于在ISR和主程序之间传递数据,为了确保正确更新ISR和主程序之间共享的变量,请将其声明为volatile。
attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);//推荐用于arduino板 attachInterrupt(pin, ISR, mode) ; //推荐 Arduino Due //参数 pin:pin 号 //参数 ISR:中断发生时要调用的 ISR; //此函数必须不带任何参数且不返回任何内容。 //该函数有时被称为中断服务程序. //参数模式:定义何时应触发中断。
以下三个常量已预定义为有效值-
LOW - 每当引脚为低电平时触发中断。
CHANGE - 以在引脚更改值时触发中断。
Falling - 每当引脚从高电平变为低电平时,
int pin=2; //将中断引脚定义为 2 volatile int state=LOW; //确保 ISR 之间共享变量 //主程序已正确更新,将它们声明为 volatile。 void setup() { pinMode(13, OUTPUT); //将引脚 13 设置为输出 attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE); //当引脚更改值时,引脚 2 处的中断闪烁 ISR } void loop() { digitalWrite(13, state); //引脚 13 等于状态值 } void blink() { //中断服务功能 state=!state; //中断发生时切换状态 }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)