Arduino:millis()和second()没有同步

时间:2017-10-22 13:01:31

标签: c arduino timing real-time-clock

我想用我的arduino计算秒针的位置,精度为1/3秒。这意味着我有180个可能的手位置,位置每1/3更新一次。我目前的代码如下:

millisec = millis() % 1000;
new_second_pos = second() * 3;

if (millisec > 666){
  new_second_pos += 2;
}
else if (millisec > 333){
  new_second_pos += 1;
}
if (sec_pos != new_second_pos){
  Serial.print(millisec);
  Serial.print(", ");
  Serial.println(new_second_pos);
  sec_pos = new_second_pos;
}

但我收到的串口输出如下:

...
11002, 0
11334, 1
11667, 2
12000, 0
12002, 3
12334, 4
12667, 5
13000, 3
13002, 6
13334, 7
...

正如你可以在很短的时间内看到的每一秒,这个数值比它应该少3。我想这是因为second()没有同步递增到millis()。我可以通过添加另一个if语句来解决这个问题:

millisec = millis() % 1000;

if ((millisec) > 5){
  new_second_pos = second() * 3;
  if (millisec > 666){
    new_second_pos += 2;
  }
  else if (millisec > 333){
    new_second_pos += 1;
  }
  if (sec_pos != new_second_pos){
    Serial.print(millisec);
    Serial.print(", ");
    Serial.println(new_second_pos);
    sec_pos = new_second_pos;
  }
}

但这对我来说看起来很可怕。如果CPU太忙而second()需要6ms怎么办?有没有更好的写作方式?

0 个答案:

没有答案