极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9804|回复: 3

如何中断一个长时间处理的功能,让它马上停止

[复制链接]
发表于 2013-5-21 08:08:53 | 显示全部楼层 |阅读模式
本帖最后由 eagleflydotnet 于 2013-5-23 10:38 编辑

如何中断一个长时间处理的功能,让它马上停止

比如吧

   if (Serial.available()) {
     while (Serial.available() > 0) {
       //可以停止下面的功能。。。。。
     }
   }
  
  digitalWrite(led, HIGH);  
  delay(8000);              


有一个处理时间比较长的功能,就像上面的    delay(8000);   

但我想当我有一个什么值或者其它什么的修改时,就不处理这个了,停止当前的功能,不在运行,这样的功能要怎么实现呀。
回复

使用道具 举报

发表于 2013-5-21 11:27:18 | 显示全部楼层
使用 attachInterrupt 即可



贴代码贴贴代码

  1. //問題來源
  2. //http://www.geek-workshop.com/thread-4653-1-1.html


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

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

  11. void takeThat(){
  12.   Serial.print(millis());
  13.   Serial.println("Got It!!");
  14. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-22 09:36:26 | 显示全部楼层
我想知道,当调用attachInterrupt后,执行完takeThat,系统是不是还会接下来执行delay(xxx) 那些,还是就停止了,不继续执行下面的代码了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-23 10:38:01 | 显示全部楼层
上网查了,基本都是像 long v = (millis() - lastChangeMillis) / 10200;

这样记录一下时间,然后和当前时间做对比的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 10:19 , Processed in 0.035938 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表