我希望使用for()
一次又一次地运行LED模式,而不会中断正在运行的其他代码。但是遇到了过多使用delay()
的问题。
因此,BlinkWithoutDelay示例只重复一件事:打开LED,然后每秒关闭。如果我是用模式做的(而不只是打开和关闭LED),我该怎么做?
问题在于millis()
在没有使用延迟的情况下运行模式还有哪些其他选择?
答案 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不可能。这需要并行处理代码。