Arduino问答实验室

问题:Arduino 使用 delay() 时,中断能触发吗?0条评论

作者:学长   发布于:2013年9月9日 16:06:58 周一    分类: Arduino    4538 人浏览

有天半夜,学长差不多打算睡觉时,有人问到 delay 时不知道中断还能不能触发?

答案是:可以触发。

今天又想起这件事,还有上次在论坛上也回答过一个类似的问题。

针对这个问题,我们来做一个简单的触发中断的小实验。


接线图如下:

接线图.png

这个接线很简单,Pin2 是 Arduino Uno 的第0号中断。使用这个中断来测试 Delay 时,中断能否触发。

按钮未按下的时候,透过 220 欧姆的电阻上拉,此时状态为 HIGH。

按钮按下的时候接地,此时状态为 LOW 。


程序如下:

void setup(){
  Serial.begin(9600);
  attachInterrupt(0,takeThat,CHANGE);
}

void loop(){
  //Serial.println("Cycle begin");
  delay(60000);
}

void takeThat(){
  Serial.print(millis());
  Serial.println("Got It!!");
}



1. 程序由 attachInterrupt 设置中断触发时执行 takeThat() 函数。触发类型为 CHANGE 。

2. 设置完成后,开始执行 loop() 内的程序,一个60000 毫秒,长时间的 Delay 不断重覆。


执行结果如下图

中斷測試.png


实际接线图如下:

接线照片.jpg

图中 Arduino控制板为 mangoII 控制板。

电阻为 220 欧姆。


完成这个实验,证明在 delay 时中断还是能验触发。并且 millis() 函数计时是运行。


最后学长提醒,在一般专案开发应该尽量避免使用 delay () 。

应该尽可能的使用时间比对的方式来计时,时间还未到指定的时候,不执行j指定的程序即可。


Me.png

Arduino问答实验室- 本站版权
1、本主题由文章作者发表,文章作者与Arduino问答实验室享有文章相关版权
2、转载或引用本文时请同时征得文章作者和Arduino问答实验室的同意
3、本站部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站即时予与以处理
5、原文链接:www.985z.com/?post=26
二维码
继续查看有关 arduino uno delay attachInterrupt mango 的文章

我来说说

*

*