以下内容:
Serial.begin(9600);
我正在打印两个值:
Serial.print(Input);
Serial.println(Output);
delay(100);
我正在测量温度和PWM信号。
使用延迟有什么缺点?
答案 0 :(得分:3)
使用延迟有以下几个缺点:
不准确
无法执行多任务
有一种很好的方法可以在不使用delay()
的情况下延迟,使用millis()
。请参阅here,了解millis()
优于delay()
的原因,以及如何最大限度地发挥其能力。
答案 1 :(得分:0)
在简单程序中使用delay()
通常很好。但是,假设您有4个任务:
您如何使用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)。