查看: 370|回复: 0

创客集结号Arduino中断知识,您知多少?

[复制链接]
  • TA的每日心情
    奋斗
    2018-7-19 10:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-10-22 12:08 | 显示全部楼层 |阅读模式
    code:
    int pbIn=0;
    int ledout=A0;
    volatile int state=LOW;
    void setup() {
    pinMode(ledout,OUTPUT);
    attachInterrupt(pbIn,stateChange,CHANGE);//监视中断输入引脚变化  
    }
    void loop() {
      for(int i=0;i<100;i++)
      {
        delay(10);
        }
    }//模拟长时间的中断
    void stateChange()
    {
      state=!state;
      digitalWrite(ledout,state);
      }

    中断命令语法介绍
    attachInterrupt(interrupt, function, mode)

    interrupt:中断引脚数
    function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。eg:stateChange~
    mode:定义何时发生中断以下四个contstants预定有效值:

    LOW 当引脚为低电平时,触发中断
    CHANGE 当引脚电平发生改变时,触发中断
    RISING 当引脚由低电平变为高电平时,触发中断
    FALLING 当引脚由高电平变为低电平时,触发中断.

    注意事项:
    1、当中断函数发生时,delya()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。
    code:
    void loop()
    {
    val=digitalRead(BUTTON);
    if((val==HIGH)&&(old_val==LOW))
    {
    state=1-state;
    startTime=millis();
    delay(10);
    }
    if((val==HIGH)&&(old_val==HIGH))
    {
    if(state==1&&(millis()-startTime)>500)
    {
    brightness++;
    delay(10);
    //了解millis()的用法。

    2、中断可以再任何时候通过attachInterrupt()命令进行改变。当重新使用attachInterrupt()时,先前分配的中断就会从对应引脚上移除。
    3、Arduino也可以忽略所有中断。如果你需要在一段代码中不执行中断,只需要执行 noInterrupts()命令。当这段代码执行完以后,你可以使用 interrupts()命令重新启用中断。
    4、 终端也可以通过detachInterrupt(interrupt_number)命令进行删除。更多知识可在创客集结号或QQ群820685901了解哦!


    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    关于arduino编译问题
    关于arduino编译问题
    编译示例程序老是这个问题,换了电脑都不行
    莫名乱码 —— Arduino+RFID-RC522 读写实验
    莫名乱码 —— Arduino+RF
    目标:想把自己房间门改成感应门锁 器材:Arduino Uno (淘宝七星虫LY-F2)、RFID-RC
    [blinker开发实战2]数据反馈
    [blinker开发实战2]数据反
    [md] ### 添加DIY组件 在编辑模式下,点击按键进入编辑组件页面,可以看到 **按键
    用Arduino控制PS2无线手柄为什么一直连接不上
    用Arduino控制PS2无线手柄
    用Arduino UNO板 连接PS2手柄接收器,为什么指示灯已经显示对接上了,但是打开串口监
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表