如何在不使用延迟的情况下运行模式()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用延迟的情况下运行模式()相关的知识,希望对你有一定的参考价值。
我想使用for()
一次又一次地运行LED模式,而不会中断正在运行的其他代码。但是遇到过使用delay()
的问题太多了。
因此,BlinkWithoutDelay示例仅重复一件事:打开LED,然后每秒关闭一次。如果我是用模式做的(不仅仅是打开和关闭LED),我该怎么做?
问题出在millis()
上
在没有使用延迟的情况下运行模式还有哪些其他选择?
同意你的代码会很高兴看到你的想要做的事情。假设变化通常比没有延迟()的循环更少,你可以使用interrupts(实际上非常容易设置arduino)或者一个名为Metro的库,它可以让你在不使用延迟的情况下触发定时事件( )或中断。
如果要显示序列,并在后台进行其他操作,则有两个选项。
首先,你可以在主要的loop()
中撒上你的序列。看起来像互联网上的“LED追逐者”和“KnightRider”效果中的一小部分是这样编码的。
void loop () {
// do something
digitalWrite();
// do something
digitalWrite();
}
或者,您可以使用计时器中断。设置起来有点棘手,但同样,快速的互联网搜索应该会带来大量的示例。在这种情况下,在Arduino上运行定时器并设置中断以触发每个xns。这将使主循环执行它正在执行的操作,并且每个xns都会快速中断以更新序列。
如果要运行时间敏感模式,可能需要尝试使用计时器中断。
教程here有一个很好的解释和几个如何使用Arduino定时器中断的例子。
如果你想在led模式进行时运行代码,我认为它不可能在arduino上。这需要并行处理代码。
以上是关于如何在不使用延迟的情况下运行模式()的主要内容,如果未能解决你的问题,请参考以下文章