0

我们正在使用 Arduino Due 通过 USB 将串行数据发送到 Visual Studio 中生成的软件。

我们遇到的问题在于到期。我们有一段对时间要求很高的代码

      PumpCycleTime = millis();
      // Loop this until the pumpHIGH duration has expired
      do
      {
        digitalWrite(Pump, HIGH);
        SendSerialData();
      }
      while (millis() - PumpCycleTime < PumpHIGH);


      // Record the pump cycle LOW start time
      PumpCycleTime = millis();
      // Loop this until the pumpLOW duration has expired
      do
      {
        digitalWrite(Pump, LOW);
        SendSerialData();
      }
      while (millis() - PumpCycleTime < 1);

最初,我们使用延迟来控制泵的频率。在示波器上测量时,这为我们提供了可靠的频率。然而,这当然会损害图表的绘制,因为数据中存在差距。

使用 millis() 我们无法产生相同的频率。显然,我们可以补偿以实现单一频率,但是我们需要能够可靠地使用范围频率。

似乎 SendSerialData() 是一个具有大约 15 个 serial.print 的函数,它正在影响时间,因为没有它,频率与预期的一样。

有谁知道任何解决方案?数据记录和实时绘制到图表是必不可少的,不能妥协。

提前致谢

4

1 回答 1

2

如果时间如此关键,不要使用delay(),使用有限状态机。除此之外,您的波特率是多少?如果它是 9600,那么您很可能会放慢速度,因为println();,请尝试使用更大的波特率(例如 115200)。

希望有帮助。

约夫

于 2017-01-10T12:29:13.633 回答