eagleflydotnet 发表于 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 即可



贴代码贴贴代码

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


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!!");
}

eagleflydotnet 发表于 2013-5-22 09:36:26

我想知道,当调用attachInterrupt后,执行完takeThat,系统是不是还会接下来执行delay(xxx) 那些,还是就停止了,不继续执行下面的代码了。

eagleflydotnet 发表于 2013-5-23 10:38:01

上网查了,基本都是像 long v = (millis() - lastChangeMillis) / 10200;

这样记录一下时间,然后和当前时间做对比的。
页: [1]
查看完整版本: 如何中断一个长时间处理的功能,让它马上停止