LOADING

加载过慢请开启缓存 浏览器默认开启

arduino的中断

arduino的中断

工程下载

arduino是支持中断的
但是缺点的目前的arduino是不支持设置中断优先级
(目前记录为2.3.3版本)
而且在中断函数中
delay()函数是不工作的,而且millis()函数返回值也不再增长。
(delayMicroseconds()函数除外)
运行期间Arduino开发板接收到的串口数据也可能丢失

arduino的中断函数初始化

attachInterrupt(中断号,中断函数, 中断模式);

中断号:
中断号不是引脚号,要具体查arduino开发板哪些引脚支持中断
在ESP32中除了34-39都可以支持中断

中断函数:
使用void xxx创建函数
函数不能有返回值,所以应尽量在中断服务程序中使用全局变量
这里写函数名即可
(比如函数xxx()只用写xxx即可)

中断模式:
arduino通用提供了5种模式选择
LOW (0x0): 当引脚为低电平时触发中断服务程序
DISABLED(0x00):失能模式,禁用中断
CHANGE (0x03): 当引脚电平发生变化时触发中断服务程序,边沿触发
RISING (0x01): 当引脚电平由低电平变为高电平时触发中断服务程序,上升沿触发
FALLING (0x02): 当引脚电平由高电平变为低电平时触发中断服务程序,下降沿触发
arduino之外的中断模式少部分芯片支持比如esp32

ONLOW (0x04):低电平触发
ONHIGH (0x05):高电平触发
ONLOW_WE (0x0C):带消抖低电平触发
ONHIGH_WE (0x0D):带消抖高电平触发

禁用中断

detachInterrupt(中断号);

中断号:
中断号不全是引脚号,要具体查arduino开发板哪些引脚支持中断
在ESP32中除了34-39都可以支持中断

使用方法

1、先初始化IO为输入(具体什么输入模式看情况)
2、初始化中断
3、写中断函数

代码参考:

int  state=LOW;

void setup() {
pinMode(2, OUTPUT);//初始化led
pinMode(13, INPUT_PULLUP); //初始化中断io
attachInterrupt(13, abc, FALLING);//初始化中断
}

void loop() {
digitalWrite(2, state);//显示led
}

void abc()//中断函数
{
delayMicroseconds(50000);//延迟50ms消抖
if (digitalRead(13)==0)
{
    state = !state;//翻转led
}

}
//2脚输出接led
//13脚按键接地

按键按键就会翻转led