arduino学习7——外部中断使用

中断定义

程序运行过程中时常需要监控一些事件的发生,如对某一传感器的检测结果做出反应。使用轮询的方式进行检测时效率较低,等待时间较长,而使用中断方式进行检测时则可以达到实时检测的效果。

当中断被触发时,控制器会暂停当前正在运行的主程序,而跳去运行中断程序,当中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序。如此便可以达到实时响应处理事件的效果。

外部中断是由外部设备发起请求的中断。要想使用外部中断,就需要了解中断引脚的位置,根据外部设备选择中断模式,以及编写一个中断被触发后需要执行的中断函数。

中断引脚

ARDUINO中的外部中断通常是由Pin口电平改变触发的。每种型号的ARDUINO板都有数个PIn口可以用来注册中断
在这里插入图片描述

中断模式

为了设置中断模式,还需要了解设备触发外部中断的输入 信号类型。中断模式也就是中断触发的方式。在大多数ARDUINO上支持以下几个中断触发方式

模式名城说明
LOW低电平触发
CHANGE电平变化触发
RISING上升沿触发,即高电平变低电平
FALLING下降沿触发,即低电平变高电平

中断函数

除了设置中断模式外,还需要编写一个响应中断的处理程序——中断函数,当中断被触发后,便可以让Arduino运行该中断函数。中断函数就是当中断被触发后要去执行的函数,该函数不能带有任何参数,且返回类型为空
这些准备工作完成后,还需要在setup()中使用attachInterrrupt()函数对中断引脚进行初始化配置,以开启arduino的外部中断功能,其用法如下:

(1)attachInterrupt(interrupt, function,mode)

功能:对中断引脚进行初始化配置
参数:
interrupt,中断编号,注意,这里的中断编号并不是引脚编号
function,中断函数名,当中断被触发后即会运行此函数所代表的中断函数。
mode,中断模式

detachInterrupt(interrupt)

功能:禁用外部中断
参数:
interrrupt,需要禁用的中断编号

实验:外部中断实现LED开关

将LED灯接到5号数字输出,2号引脚注册为外部中断引脚,接一个按键开关,当按下开关时改变LED的状态

bool state = true;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  
  attachInterrupt(0,StateChange,FALLING);
  pinMode(5,OUTPUT);
  pinMode(2,INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
    if(state){
    digitalWrite(5,HIGH);
    }
    else
    digitalWrite(5,LOW);
}

void StateChange(){
  state= !state;
}

利用外部中断将BUTTON按钮做为选择器

设置两个BUTTON按钮分别连接两个LED,初始时两个LED都为熄灭状态,当按下按钮1时,LED1点燃,再次按下BUTTON1时,LED1熄灭,当按下BUTTON2时,LED2点燃,LED1熄灭,同样按下BUTTON1,LED2熄灭。

bool rstate = false;
bool bstate = false;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  
  attachInterrupt(0,RStateChange,FALLING);
  attachInterrupt(1,BStateChange,FALLING);  
  pinMode(5,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
    digitalWrite(5,rstate);
    digitalWrite(7,bstate);
}

void RStateChange(){
  rstate = !rstate;
  bstate = false;
}
void BStateChange(){
  bstate = !bstate;
  rstate = false;   
  }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值