当我的 Arduino 启动时,我尝试将其时间与互联网同步,并使用以下代码来执行此操作。这段代码在过去是有效的,但今天它永远不会退出 while 循环,所以我在循环中放置了一些调试语句来查看发生了什么。从输出来看,它会在这个循环中持续很长时间。我得到了这段代码,所以我真的不知道 while 循环的目的是什么。有什么想法或者有更好的方法同步时间吗?感谢您的帮助!
void initTime()
{
const int MIN_EPOCH = 40 * 365 * 24 * 3600;
time_t epochTime;
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
Serial.print("Fetching time from NTP");
epochTime = time(NULL);
while (epochTime < MIN_EPOCH)
{
Serial.print(".");
delay(2000);
epochTime = time(NULL);
Serial.print("MIN EPOCH: ");
Serial.println(MIN_EPOCH);
Serial.print("EPOCH TIME: ");
Serial.println(epochTime);
}
Serial.println();
Serial.print("Fetched NTP epoch time is: ");
Serial.println(epochTime);
}
输出:
从 NTP.MIN EPOCH 获取时间:1261440000
纪元时间:28810
.最小纪元:1261440000
纪元时间:28812
.最小纪元:1261440000
纪元时间:28814
.最小纪元:1261440000
纪元时间:28816
.最小纪元:1261440000
纪元时间:28818
.最小纪元:1261440000
最佳答案
解释循环正在做什么:
configTime
启动(或可以启动)一个异步进程来经常同步时间。循环检查并确保我们有一个理智的时间(1970 年 1 月 1 日后 40 年,即 2010 年 1 月 1 日)。如果不正常,我们会等待直到同步。
我认为您也许可以使 SNTP 进程同步,但如果您陷入困境,这会让您陷入困境。
关于c - 与互联网同步时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778235/