Arduino 外部中断
第一篇Arduino的日志啧啧。
中断的概念。
我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。
在Arduino库中定义,UNO有两个中断,MEGA2560有六个中断。具体如下表,来自 http://arduino.cc/en/Reference/AttachInterrupt
DUE普及率非常一般,暂不涉及。
语法。
attachInterrupt(interrupt, function, mode)
变量使用。
1)interrupt:中断号,UNO只能使用 0或1 ,即代表D2 与D3口。
2)function:调用中断函数,中断发生时调用的函数。
3)mode:中断触发模式。
UNO R3 支持四种中断触发模式:
LOW | 当针脚输入为低时,触发中断 |
CHANGE | 当针脚输入发生改变时,触发中断 |
RISING | 当针脚输入由低变高时,触发中断 |
FALLING | 当针脚输入由高变低时,触发中断 |
中断函数不返回任何值。
中断函数的使用方法:
首先给出一段来自官方的例程:
int pin = 13; //首先我们需要找一个灯来观察 volatile int state = LOW; //设置灯状态 void setup() { pinMode(pin, OUTPUT); attachInterrupt(0, blink, CHANGE); //设置触发,中断号0,即数字2口 } void loop() { digitalWrite(pin, state); //对观察灯写入状态值 } void blink() //触发函数 { state = !state; //将状态变量求反 }
我们从中可以看出,使用中断函数时,不需要定义针脚状态,直接使用中断函数即可。
当我们需要取消中断时,我们有下面的命令。
detachInterrupt(interrupt)
interrupt 是中断号。执行此语句后,系统不会对中断有反应,即上例中,系统不会再对灯状态进行改变。