1.什么是中断?
试想一下,你正在家里吃饭,这时传来了敲门声,虽然你巨饿,虽然面前全是山珍海味,但此时你不得不去开门,同时不得不放停下生命中最重要的事情——吃饭。打开门后,你发现只是一个查水表的,你检查了水表读数并告诉了查水表的人。关上门,你马不停蹄的又投入了于食物的作战中。
我们来分析一下这个颇具传奇性的故事,在这里人生的主旋律——吃饭,就是你的主程序,而敲门声,就是一个中断信号,它让你不得不去执行你的人生插曲——开门接客这个中断函数。完成这个小插曲后,你又要投入到主线剧情 吃饭这个主程序上。
现在我想告诉你一个惊天秘密,其实你妈欺骗了你,你根本不是他们亲生的,你是人造人,而你的大脑里装备了一个arduino控制器!你的型号是 Arduino 吃货,之所以叫这么2的名字,是因为你的loop的写法问题。我们来看看你的loop函数。
voidloop() {
吃();
}
但实际上,你还有附加功能 开门();
void开门(){
打开门;
if(门口的人==女神)
跪舔();
if(门口的人==查水表的)
报告水表读数();
}
为了让你能顺利执行 开门();动作,你的亲生父母还得在Setup函数中设置 开门();这个动作何时启动。(也可能是你后妈设定的),具体的方法是attachInterrupt(中断通道, 中断函数, 触发方式); ,在这里中断通道就是你的耳朵(不要问为什么不是屁股),触发 开门();这个函数的方式是 敲门声。
voidsetup(){
attachInterrupt(耳朵, 开门, 敲门声);//耳朵传感器在此不做介绍,有兴趣的自行研究
}
型号 | int.0 | int.1 | int.2 | int.3 | int.4 | int.5 |
UNOEthernet | 2 | 3 | ||||
Mega2560 | 2 | 3 | 21 | 20 | 19 | 18 |
Leonardo | 3 | 2 | 0 | 1 | ||
Due | 所有IO口均可 |
中断函数就是你要去执行的函数,这个函数不能带任何参数,且没有返回类型。如:
voidholle()
{
Serial.println("holle");
}
外部中断的使用也是非常简单的,下面我们来看一个官方提供的例程
intpin = 13;
volatileintstate = LOW;
voidsetup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);//当int.0电平改变时,触发中断函数blink
}
voidloop()
{
digitalWrite(pin, state);
}
voidblink()//中断函数
{
state = !state;
}
欢迎光临 烽火社区 (https://bbs.cnecport.com/) | Powered by Discuz! X3.2 |