在 arduino - millis( ) 或 Scheduler Library 中哪个是多任务处理的更好选择?

Which is a better option for multitasking in arduino - millis( ) or Scheduler Library?

我有一个应用程序,我想每 10 秒闪烁一次(触发一秒钟)螺线管,同时接收串行输入来旋转伺服电机。

delay() 会产生冲突,所以我已经完成了 millis() 函数,在 arduino 网站上很容易 understand.But 他们有一个叫做 Scheduler 库的东西,看起来非常简单(虽然还没有尝试过)。

那么,要考虑哪个更好、更有效的选择,是 millis() 还是调度程序?

谢谢,

调度程序库也使用 millis() 来计算任务之间的延迟。

要link调度程序的函数,它需要有一个void f(void)原型。

因此,为了能够添加 returns 某物或具有参数的函数,您需要将其包装在 void f(void) 原型的另一个函数中。

恕我直言,当您有多个任务时,调度程序库有助于组织您的代码(这个库最多有 10 个任务,但您可以更改它)。

在你的例子中,你只有两个任务。使用 millis().

使用您自己的小调度程序可能会更好

如果你想继续使用 millis(),那么 Simple Multi-tasking in Arduino 会有所帮助。它包括:- 添加一个 loopTimer 以查看您的 loop/tasks 有多慢 运行,从您的代码和第三方库中删除延迟,读取串行输入而不阻塞并发送串行打印而不阻塞并提供更多重要任务时间.

最后将代码原封不动的传给ESP32添加遥控器。

基本代码是

void loop() {
 callTask_1(); // do something
 callTask_2(); // do something else
 callTask_1(); // check the first task again as it needs to be more responsive than the others.
 callTask_3(); // do something else
}

诀窍在于每个 callTask​​..() 方法都必须 return 快速,以便循环中的其他任务能够迅速且经常地被调用。其余的指导内容包括如何快速完成任务 运行 而不是拖延一切,使用带有用户界面的温度控制步进电机驱动阻尼器作为具体示例。