嵌入式

Arduino 中断

2022-07-03  本文已影响0人  老中医167788

中断介绍

“中断”顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序。当中断服务程序完成以后,再回来继续执行刚才执行的事情。中断服务程序对监测Arduino输入有很大的用处。

Arduino控制板 支持中断的引脚

Arduino控制板 支持中断的引脚
Uno, Nano, Mini 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo 0, 1, 2, 3, 7
Zero 除4号引脚以外的所有数字引脚
MKR1000 Rev.1 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due 所有数字引脚

中断函数说明

void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
参数interruptNum;支持中断的编号从0开始例如nano有两个中断引脚分别为D2、D3 如果使用D2就填0,D3填1
userFunc; 是函数指针就是你的中断函数。
mode; 是中断触发方式 参考如下
low 当引脚为低电平时触发
change 当引脚高低变化时触发
rising 当引脚由低电平变高电平时触发
falling 当引脚由高变低时触发

实验一

按键(中断)切换led显示状态

代码

// 记录电平状态
int state = 0;

void setup()
{
    pinMode(LED_BUILTIN, OUTPUT);
    attachInterrupt(0, myInterruptFunc, RISING); // 当电平由低变高触发中断函数
}

void loop()
{
    digitalWrite(LED_BUILTIN,state);  // 设置电平
}

// 中断函数 D2口由低电平到高电平时触发
void myInterruptFunc()
{
    state = ~state; // 更改电平状态
}

实验二

中断触发 led1点亮1s之后关掉 然后led2闪烁

接线

引脚 原件
D2 按键
D13 板载LED1
D3 LED2

注意;代码中并没有使用上拉输入功能 D2需要外接1000ohm上拉电阻也就是默认给与低电平。

代码

int state = 0;
int LED1 = LED_BUILTIN;
int LED2 = PD3;

void setup()
{
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    attachInterrupt(0, myInterruptFunc, RISING); // 当电平由低变高触发中断函数

    digitalWrite(LED2, HIGH); // LED2设置高电平 关掉
}

void loop()
{
    if (state == 1)
    {
        digitalWrite(LED1, HIGH);
        delay(1000);
        digitalWrite(LED1, LOW);
        state = 2;
    }
    else if(state == 2)
    {
        digitalWrite(LED2, LOW);
        delay(300);
        digitalWrite(LED2, HIGH);
        delay(300);
        digitalWrite(LED2, LOW);
        delay(300);
        digitalWrite(LED2, HIGH);
        state = 0;
    }
}

// 中断函数
void myInterruptFunc()
{
    state = 1;
}
演示1.jpg

由于没有GIF静态图将就看吧实际动手就能看到效果了 可以参考下我的接线。

上一篇下一篇

猜你喜欢

热点阅读