一段时间后,时钟算法落后几分钟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一段时间后,时钟算法落后几分钟相关的知识,希望对你有一定的参考价值。

我正在尝试使用Arduino制作一个数字时钟,但几个小时后它就落后了几分钟。

我在4ms之后增加了辅助值,所以技术上在15000 * 4 ms后它会增加最后一分钟数字吗?

void loop() {
  // t is first hour digit
  // y is the second hour digit
  // u is the first minute digit
  // i is the second minute digit

  if (t == 2 && y == 4) {
    t = 0;
    y = 0;
  }
  digitalWrite(ox, 0);
  digitalWrite(oy, 1);
  digitalWrite(mx, 1);
  digitalWrite(my, 1);
  draw(t);
  delay(1);
  digitalWrite(ox, 1);
  digitalWrite(oy, 0);
  digitalWrite(mx, 1);
  digitalWrite(my, 1);
  draw(y);
  delay(1);
  digitalWrite(ox, 1);
  digitalWrite(oy, 1);
  digitalWrite(mx, 0);
  digitalWrite(my, 1);
  draw(u);
  delay(1);
  digitalWrite(ox, 1);
  digitalWrite(oy, 1);
  digitalWrite(mx, 1);
  digitalWrite(my, 0);
  draw(i);
  delay(1);
  aux++;
  if (aux == 15000) {
    aux = 0;
    i++;
  }
  if (i > 9) {
    i = 0;
    u++;

  }
  if (u == 6) {
    u = 0;
    y++;
  }
  if (y > 9) {
    y = 0;
    t++;
  }
}
答案

尝试做这样的时钟的问题是你不能保证你的代码正好在你想要的时间运行。

举个简单的例子,考虑浏览器中可用的setTimeout()函数。如果我告诉setTimeout()每1000毫秒运行一次我的函数,我希望每次调用之间的差异恰好是1000毫秒:

let lastTime;

const run = () => {
  const now = Date.now();
  lastTime && console.log('diff', now - lastTime);
  lastTime = now;
  setTimeout(run, 1000);
}

run();

以上是关于一段时间后,时钟算法落后几分钟的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 使用几分钟后停止工作

几分钟后终止 SQL Server 事务

一段时间后,AsyncTask 在服务中变慢

几分钟后,圣杯上的气氛挂起

雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论