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

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上。这需要并行处理代码。

以上是关于如何在不使用延迟的情况下运行模式()的主要内容,如果未能解决你的问题,请参考以下文章

如何在不锁定活动方向的情况下锁定片段方向?

如何在不延迟任务的情况下优雅地重启 Celery

如何在不单击的情况下显示片段

如何在不创建新片段的情况下显示片段?

如何在不与 MainActivity 交互的情况下从通知中打开片段页面?

如何在不冻结线程的情况下延迟答案? [复制]