millis()という関数がある。
Returns the number of milliseconds since the Arduino board began running the current program.
プログラム開始からの時間をミリ秒で返す。
Examplesの中のNTPClientを元に少し変更する。
NTPサーバへ時刻を読みに行き、便宜上 Seconds since Jan 1 1900 として計算されているものからmillis()の値を秒に直したものを引いた値を表示する。
millis()が正確なら、この値は常に同じになるはずだ。
上がスタート直後の表示。
下が丸一日以上経過後の表示だ。
青線が時刻の経過を示している。
3662391985 – 3662289938 = 102047( 28時間20分47秒経過 )
で、赤字は、millis()との差で、上と下が同じ値ということは、1秒も狂っていないということだ。
ちなみに赤線の値の上に表示されている値がmillis()で、もちろんこちらの引き算でも28時間20分47秒経過という結果になる。
もっとも、半日で10秒進んで残りの半日で10秒遅れた結果ということも考えられるわけで、1日分の値の変化のグラフを下に示す。
横軸が時間で1日分、縦軸は時間のズレをあらわす。
2本しか線が見られないということは、1秒以内の推移で収まっていることを示している。
なかなか優秀。
ESP8266関連記事一覧へ