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

问题描述 投票:1回答:3

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

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

问题出在millis()

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

arduino delay
3个回答
1
投票

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


0
投票

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

首先,你可以在主要的loop()中撒上你的序列。看起来像互联网上的“LED追逐者”和“KnightRider”效果中的一小部分是这样编码的。

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.