基本上我正在写一段简单的代码来每秒递增一次并显示时间和日期,这让我很沮丧,而且我确信我忽略了一些明显的东西.
因此,我将时间显示为MJD(修改的Julian日期)HH:MM:SS,但也允许硬编码的MJD表示闰秒事件,然后正确显示闰秒.
它有点工作,但它跳过了23:59:59.
我最终计划移植到普通的旧AVR,所以我真的不想乱用arduino库.
int second = 0, minute = 0, hour = 0;
long mjd = 55000;
long leap = 55964;
void setup()
{
Serial.begin(9600);
Serial.print("MDJ ");
Serial.print(mjd);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
void loop()
{
second++;
if (mjd == leap && hour == 23 && minute == 59 && second == 59) {
second++;
} else {
if (second > 59) {
minute++;
second = 0; // reset seconds to zero
}
}
if (minute > 59) {
hour++;
minute = 0;
}
if (hour > 23) {
mjd++;
hour = 0;
}
Serial.print("MDJ ");
Serial.print(mjd);
Serial.print(" ");
if (hour < 10)
Serial.print("0");
Serial.print(hour);
Serial.print(":");
if (minute < 10)
Serial.print("0");
Serial.print(minute);
Serial.print(":");
if (second < 10)
Serial.print("0");
Serial.println(second);
delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
我想你可能只需要一个很小的变化:
if (mjd == leap && hour == 23 && minute == 59 && second == 60) {
// allow 23:59:60
} else {
...
Run Code Online (Sandbox Code Playgroud)
问题似乎是你增加到下一秒,然后如果它是23:59:59并且指示了闰秒,你再次增加到60(跳过59).
您可能想要做的就是滚动秒,除非它是闰秒.
归档时间: |
|
查看次数: |
648 次 |
最近记录: |