【问题标题】:Arduino - stopping the loop of readString.indexOf (+Blinking LED loop break)Arduino - 停止 readString.indexOf 的循环(+闪烁 LED 循环中断)
【发布时间】:2017-09-21 18:16:50
【问题描述】:

我的情况 我正在使用移位寄存器来控制 72 个 LED。 每个 LED 都可以通过特定请求激活。将 LED 设置为高电平很容易,但 LED 应该闪烁。通过“for”使 LED 闪烁不是问题。 我设法让 LED 闪烁,一旦它闪烁,当有新请求到来时它不会停止。LED 应该只闪烁直到有新请求到达。

我的问题是如果在闪烁周期(在示例中为 3 次)我无法停止它。如果我发送一个新的if(readString.indexOf("?button1onA2") > 0),例如另一个 LED (?button1onA2),只要之前请求中的 LED 仍在闪烁,该请求就会被忽略。

我的目标是让 LED 闪烁,但在通过“readstring”的新请求到达时停止

我的问题:

  • 有没有更好的方法让 LED 循环闪烁,而不是使用 for (i = 0; i < 3; i++)?
  • 我在循环中如何打破它并转到下一个 LED?

我的代码

if (readString.indexOf("?button1onA1") > 0) 在这种情况下,传感器 ID 为 4 的 LED 应闪烁。

      if (readString.indexOf("?button1onA1") > 0) {

        for (i = 0; i < 3; i++)
        {
          shifter.setPin(4, HIGH);
          shifter.write();
          delay(200);
          shifter.setPin(4, LOW);
          shifter.write();
          delay(200);

        }

【问题讨论】:

  • 我投票结束这个问题,因为这个问题属于 arduino.stackexchange.com 网站。

标签: arduino blink


【解决方案1】:

您必须使用非阻塞延迟(例如,Blink Without Delay)。 一个好的方法是使用状态机(或其中的许多)。

但理论上,您可以只存储应该闪烁的 LED 的位掩码,并同步闪烁它们(无阻塞延迟)。

【讨论】:

  • 谢谢,我已将它添加到代码中,但没有闪烁 if (readString.indexOf("?wall01_01") > 0) { unsigned long now = millis(); if (now - lastTime >= PERIOD) // 每 PERIOD 毫秒都为真 { lastTime = now; if (ledState == LOW) { ledState = HIGH; } 其他 { ledState = 低; } shifter.setPin(1, ledState);移位器.write(); } }
  • @Sebastian,请更新源代码并在您的问题上添加描述而不是评论。
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 2014-05-30
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多