2014-10-28 120 views
0

在我的下一个项目中我使用延迟(10000)的4个LED。我需要一个取消这个循环的函数,并用一个新的延迟值重新开始,例如, 100.Arduino interupt延迟功能

我已经启用了中断,当我按下一个按钮时,延迟变为100轮后。我必须等待10秒..可以用新值重新启动循环功能吗?

+0

有时答案是“否,你搞砸了实施,再试一次,这次指定的要求。” – 2014-10-28 17:00:04

回答

1

哇这是粗鲁的ignacio 至少有帮助。

你可以做到这一点,但不是像你已经实施。

在这种情况下延迟并不好。实施的一个更好的方法是使用一个while循环是这样的:

int delayLED = 10000; 

int beginMillis = millis(); 

while(millis() - beginMillis < delayLED) 
{ 
    // insert the code for your "interrupt" here 
    // kinda like this 
    if(button pressed) 
    { 
     delayLED = 100; 
     break; 
    } 
} 

这只是一个模板不是一个完整的答案。 如果您还有其他问题,请告诉我。

快乐编码!

+0

我想补充一下:看看例子!第一个使用arduino制作的教程是如何在延迟的情况下闪烁LED,第二个教程没有。在尝试失去时间之前,试着学习一下如何工作... – frarugi87 2014-10-29 12:24:50

+0

不确定你在说什么样的例子,但是arduino.cc网站上的延迟函数本身有一个很好的写法,不用它来用于计时代码。我认为对于刚接触Arduino的人来说这是一个完全有效的问题。无论他们是通过示例(?),文档还是通过在网站上提问等方式来学习它。 – djUniversal 2014-10-29 12:40:28

+0

我实际上面临同样的问题,我想知道如果没有另一种方式?这个解决方案我不喜欢的是,如果在标志变量评估之后调用中断,那么函数将执行我们不想执行的操作。顺便说一句,它似乎是一种汇集。有没有办法实际展开函数堆栈,或只是在我们进入中断调用时指向另一个地址内存?我想确定它是否真的有可能,并且如果我能打破我的芯片这样做? – 2015-03-03 16:28:53