【问题标题】:How to run a pattern without using delay()如何在不使用延迟()的情况下运行模式
【发布时间】:2011-03-30 04:48:48
【问题描述】:

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

因此,BlinkWithoutDelay 示例仅重复一件事:每秒打开和关闭 LED。如果我要使用某种模式(而不仅仅是打开和关闭 LED),我会怎么做?

问题在于millis()

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

【问题讨论】:

  • 看起来你有一个逻辑问题,而不是真正的编码问题。您应该能够使用正确的 if 语句来显示您想要的任何模式来切换内容,就像在 BlinkWithoutDelay 示例中一样。
  • 您可以在您的问题中添加相关代码吗?

标签: arduino delay


【解决方案1】:

同意您的代码会很高兴看到,了解您正在尝试做的事情。假设更改比没有延迟()的循环更少,您可以使用interrupts(实际上很容易在arduino上设置)或一个名为Metro的库,它可以让您触发定时事件不使用 delay() 或中断。

【讨论】:

【解决方案2】:

如果你想显示一个序列,你有两个选择,并且在后台进行其他操作。

首先,您可以在主loop() 中添加您的序列。看起来网上的“LED 追逐者”和“骑士骑士”特效有不少是这样编码的。

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

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

【讨论】:

    【解决方案3】:

    如果您想运行对时间敏感的模式,您可能想尝试使用定时器中断。

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

    如果您想在 LED 模式进行时运行代码,我认为在 arduino 上是不可能的。这需要对代码进行并行处理。

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多