Arduino-中断
中断:
当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序,执行完之后回到原程序继续执行原程序的过程称之为中断
中断的分类:Arduino中的中断可以分为两类:外部中断和定时中断
外部中断:一般是指由外设发出的中断请求,即中断源在外部。如键盘中断、打印机中断等。外部中断需要外部中断源发出中断请求才能发中断。
定时中断:主程序在运行的过程中停一段时间就进行一次中断,执行中断服务程序,不需要中断源的中断请求触发,这有时是自动进行的。
外部中断:
外部中断需要外部的触发,在Arduino UNO中数字引脚2和3是连接外部触发电路的,它们的中断号分别是0和1【0表示用引脚2,1表示用引脚3】。在写程序时通常把中断函数写在setup()中
例子:
volatile int state=LOW;//需要在中断函数内部更改的值需要声明为volatile类型 void setup(){ pinMode(13,OUTPUT); attachInterrupt(0,blink,CHANGE); //设置外部中断函数 //参数1 中断号 0表示用引脚2,1表示用引脚3 //参数2 中断函数 //参数3 中断触发模式: // LOW:当针脚输入为低时,触发中断。 // CHANGE:当针脚输入发生改变时,触发中断。 // RISING:当针脚输入由低变高时,触发中断。 // FALLING:当针脚输入由高变低时,触发中断。 //不同型号的Arduino板,其外部中断的触发的引脚和引脚数目,以及中断触发方式都不太一样,在使用外部中断时一定要弄清楚使用的Arduino板的型号。 } void loop(){ digitalWrite(13,state); } void blink(){ state=!state;} //中断服务程序不能有参数和返回值 //在中断函数中delay()函数将不再起作用。在中断函数中millis()函数的值将不会增加 //得到的串行数据将会丢失
取消中断:
detachInterrupt(0); //参数 中断号
取消中断和关中断是两个不同的概念。当关中断之后,所有的中断都不能执行,但是取消某个中断之后,其他的中断还是可以执行的
定时中断---定时器:
常用的库有FlexiTimer2.h和MsTimer2.h,这两个库的用法是大同小异的
例子:
#include <MsTimer2.h> //定时器库的头文件 volatile int state=LOW; void setup(){ pinMode(13,OUTPUT); MsTimer2::set(500,blink); //中断设置函数,每500ms进入一次中断 //参数1 时间 单位毫秒 //参数2 中断函数名 MsTimer2::start(); //开始计时 } void loop(){ digitalWrite(13,state); } void blink(){ state=!state; }
MsTimer2::stop(); //停止计时
天子骄龙