Arduino 中断

作者: 老中医167788 | 来源:发表于2022-07-03 01:33 被阅读0次

    中断介绍

    “中断”顾名思义就是中断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静态图将就看吧实际动手就能看到效果了 可以参考下我的接线。

    相关文章

      网友评论

        本文标题:Arduino 中断

        本文链接:https://www.haomeiwen.com/subject/ggklbrtx.html