Arduino基础入门篇13—外部中断

本篇介绍Arduino外部中断的使用,通过外部中断检测震动开关的触发来控制LED灯亮灭。

1. 中断介绍

我们已经知道,Arduino程序是在loop()中不断的循环的。在程序的运行中,我们时常需要监控一些事件的发生,比如对某一传感器的返回数据进行解析。使用轮询的方式检测,效率比较低,而且随着程序功能增加,轮询到指定功能时需要等待的时间变长。而使用中断方式检测,可以到达实时检测的效果。

中断程序可以看作是一段独立于主程序之外的程序,当中断触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序,中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序。如此便可做到实时响应处理事件的效果。

2. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • 1个LED灯
  • 1个220Ω限流电阻
  • 1个震动开关

震动开关,即震动传感器,根据其结构的不同又分为弹簧开关和滚珠开关。

  • 弹簧开关,其内部由一根中心金属导电脚和环绕在其外部的弹簧导电脚组成。弹簧震动时会接触到中心导电脚,形成短路闭合状态;

  • 滚珠开关,其内部包含有一颗金属滚珠,当震动时滚珠滚动短路两个导电脚,形成短路闭合状态。

震动开关

3. 实验步骤

1. 根据原理图搭建电路。

直插式LED灯负极接开发板GND,正极接220Ω限流电阻,电阻另一端接开发板数字9引脚。震动开关一端接开发板GND,另一端接数字引脚2。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
   ShakeSwitch
   中断检测振动传感器,控制LED灯亮灭
*/
int SensorLED = 9;       //定义LED为数字引脚9
int SensorINPUT = 2;      //连接震动开关到中断0,也就是数字引脚2
char state = LOW;

void setup() {

  pinMode(SensorLED, OUTPUT);         //LED为输出模式
  pinMode(SensorINPUT, INPUT_PULLUP);        //震动开关为输入模式

  //下降沿触发,触发中断0,调用blink函数
  attachInterrupt(0, blink, FALLING);
}

void loop() {

  if (state == HIGH) {        // 如果state为HIGH
    state = LOW;
    digitalWrite(SensorLED, HIGH);  // 亮灯
    delay(500);          //延时500ms
  }
  else {
    digitalWrite(SensorLED, LOW);    // 否则,关灯
  }
}
void blink() {               //中断函数blink()
  state = !state;             //一旦中断触发,state状态反转
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

4. 实验现象

触发震动后,LED灯点亮一段时间后熄灭。再次触发震动再次点亮。

实验现象

5. 函数介绍

attachInterrupt()

  • 描述:外部中断配置函数。
  • 函数原型:attachInterrupt(interrupt, ISR, mode)
  • 参数:
    • interrupt: 中断号。不同Arduino开发板中断号不同。Uno R3有两个外部中断,分别为数字管脚2(中断0)和数字管脚3(中断1)。
    • ISR: 中断处理函数。此函数不带参数,没有返回值。
    • mode: 中断触发方式。
      • LOW: 低电平触发。
      • CHANGE:管脚状态改变触发。
      • RISING:上升沿触发。
      • FALLING:下降沿触发。
  • 返回值:无。

6. 实验分析

通过attachInterrupt()函数注册数字管脚2为外部中断,触发方式为下降沿触发。中断处理函数blink()中每触发一次翻转一次state的状态。loop()函数中通过state状态来控制LED灯亮灭。

中断是非常实用的功能,它释放了CPU资源来做更多的事情。很多处理器、控制器都有中断功能,更高级的还包括中断优先级「多个中断同时触发时处理先后问题」和中断嵌套「中断中的中断」。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,072评论 0 13
  • Arduino Due有14个数字I/O,6个模拟I/O,一个复位开关,一个ICSP下载口,7-12v电源供电。 ...
    麦牛2013阅读 3,404评论 0 8
  • 一、原理简介 键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入...
    创客乌托邦阅读 4,858评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 职场,就像一辆公交车 我们知道它有起点和终点, 却无法预知沿途的经历。 有的人很从容,可以欣赏窗外的景色。 有的人...
    米娅C阅读 442评论 3 2