如何在不使用延迟的情况下运行模式()

时间:2011-03-30 04:48:48

标签: arduino delay

我希望使用for()一次又一次地运行LED模式,而不会中断正在运行的其他代码。但是遇到了过多使用delay()的问题。

因此,BlinkWithoutDelay示例只重复一件事:打开LED,然后每秒关闭。如果我是用模式做的(而不只是打开和关闭LED),我该怎么做?

问题在于millis()

在没有使用延迟的情况下运行模式还有哪些其他选择?

3 个答案:

答案 0 :(得分:1)

同意你的代码很高兴,看看你想要做什么。假设更改通常比没有延迟()的循环更少,您可以使用interrupts(实际上非​​常容易设置arduino)或者使用名为Metro的库在不使用延迟()或中断的情况下触发定时事件。

答案 1 :(得分:0)

如果您想要显示序列,并在后台进行其他操作,则有两个选项。

首先,您可以在主loop()内撒上您的序列。看起来互联网上的“LED追逐者”和“KnightRider”效果很少,就像这样编码。

void loop () {
    // do something
    digitalWrite();
    // do something
    digitalWrite();
}

或者,您可以使用计时器中断。设置起来有点棘手,但同样,快速的互联网搜索应该会带来大量的示例。在这种情况下,在Arduino上运行定时器并设置中断以触发每个xns。这将使主循环执行它正在执行的操作,并且每个xns都会快速中断以更新序列。

答案 2 :(得分:0)

如果要运行时间敏感模式,可能需要尝试使用计时器中断。

教程here有一个很好的解释和几个如何使用Arduino定时器中断的例子。

如果你想在led模式进行时运行代码,我认为arduino不可能。这需要并行处理代码。