拖延的缺点

时间:2016-11-21 22:06:30

标签: arduino delay pwm

以下内容:

Serial.begin(9600);

我正在打印两个值:

Serial.print(Input); 
Serial.println(Output);
delay(100);

我正在测量温度和PWM信号。

使用延迟有什么缺点?

2 个答案:

答案 0 :(得分:3)

使用延迟有以下几个缺点:

  • 不准确

  • 无法执行多任务

有一种很好的方法可以在不使用delay()的情况下延迟,使用millis()。请参阅here,了解millis()优于delay()的原因,以及如何最大限度地发挥其能力。

答案 1 :(得分:0)

在简单程序中使用delay()通常很好。但是,假设您有4个任务:

  • 您希望每2秒执行一次的
  • 您希望每3秒执行一次的
  • 您希望每3.5秒执行一次的
  • 串行读取任务,一旦到达就应该读取串行输入

您如何使用delay()处理此问题?最好使用基于millis()micros()函数的方法,比如here,或者使用elapsedMillis library,它在底层做同样的事情,但会生成代码更具可读性。

主要的想法是,你想要一种定时器,它存储从上次重置开始经过的时间。您可以在loop()函数的每次迭代中检查这些计时器的状态,如果它们完成,则执行相关任务:

void loop() {
  if(isTimerDone(Tim1)) {
    T1();
    resetTimer(Tim1);
  }
  if(isTimerDone(Tim2)) {
    T2();
    resetTimer(Tim2);
  }
  if(isTimerDone(Tim3)) {
    T3();
    resetTimer(Tim3);
  }
  readSerialPort();
}

这样就很容易改变每个任务的时间,因为它独立于其他任务。向程序添加更多任务也很容易。

同样正确的是,delay()(但也millis())是无辜的,从某种意义上说,你不能保证有一个确切的时机。为了确保任务在给定时间后执行完全,您需要使用中断,例如here(Timer1上的Arduino Playground)。