如何使用Arduino代码中的延迟?

时间:2013-04-23 15:51:53

标签: c multithreading arduino delay

有没有办法可以使用delay command并在后台运行其他内容?

4 个答案:

答案 0 :(得分:3)

有点,if you use interruptsdelay本身使用这些。但它并不像多线程解决方案那样优雅(这可能是您正在寻找的)。 Arduino有一个Multi-Threading库,但我不确定它的工作情况有多好,甚至不行。

Arduino一次只能运行一个线程,这意味着它一次只能一件事。您可以使用中断来逐字地中断代码的正常流程,但它在技术上仍然不会同时执行。我链接的库试图实现你可能称之为粗略的“超线程”解决方案。两个线程在单个物理处理核心上串联执行。

答案 1 :(得分:1)

如果您需要执行其他代码,则需要学习如何使用millis()进行编程。这涉及将代码从“逐步”执行转换为基于时间的状态机。

例如,如果您想让LED闪烁,则该LED有两种状态:开和关。您可以在足够的时间过后更改状态。

以下是一系列如何将基于delay()的代码转换为基于millis()的代码的示例: http://www.cmiyc.com/blog/2011/01/06/millis-tutorial/

答案 2 :(得分:0)

通常您只需要一个计时器和一个ISR例程。如果没有中断,你将无法生存:P Here你可以找到一个很好的解释。

答案 3 :(得分:0)

我同意JamesC4S,状态机可能是在你的情况下使用的正确形式。例如,您可以尝试使用ThingML语言(使用组件,状态机等),以及编译为Arduino代码的语言。一个简单的例子can be found here