如何创建一个独立的arduino计时功能?可能吗?

时间:2014-10-08 01:29:37

标签: function arduino delay

我想用两个参数创建一个函数。参数1需要是时间延迟。参数2将是在适当的时间过去后执行的另一个函数。最后一件事是,我将一遍又一遍地使用这个功能。我会这样用:

void loop()
{
   //code

   desiredFunction(1000, functionToRun(someArg));

   //code   

   desiredFunction(2000, anotherFunctionToRun(someArg));

   //more code

}

我甚至可以省略参数2并用布尔值替换它,我可以使用它来控制if语句。最重要的是我可以有一个完全放在一个独立功能中的延迟(没有任何全局变量 - 如果我多次使用该功能,以防止任何覆盖)

我的代码是事件驱动的,我不能使用" delay()"功能。与此同时,我不想使用下面的代码,因为它会强制您在每次使用时定义一个长整型变量,这会使我的代码混乱。如果一个辉煌的人能够弄清楚如何编写一个方法,比如我在描述我会非常感激。我会把你的名字放在我的计算神殿里: - )

  long previousMillis = 0;

  void setup()
  { 
  }

  void loop()
  {
     unsigned long currentMillis = millis();

     if(currentMillis - previousMillis > interval) 
     {
         previousMillis = currentMillis;  
         //do stuff
     }
  }

感谢您的帮助。

麦克

2 个答案:

答案 0 :(得分:0)

关于long变量的使用,当你正在处理时间时,没有其他选择:如果你的程序运行了很长时间怎么办?

所以我想你可以使用一个小的RTOS,如:

  • NilRTOS - 非常轻巧,非常简单,基于ChibiOS / RT
  • ChibiOS/RT - 更多高级功能,适用于很多平台以及Arduino。

我个人使用ChibiOS / RT是因为it is very well documented并且有很多simple examples

希望这会有所帮助:)

答案 1 :(得分:0)

不需要重新发明轮子,有很多库可以为你做这件事。

http://playground.arduino.cc/Code/SimpleTimer(可能更简单)。 http://playground.arduino.cc/Code/Timer

对于传递变量,如果没有库支持它,您可以使用定时事件和主流代码都可以使用的全局变量。