僅使用Arduino,顯示屏和少量按鈕,在16x2 LCD上顯示日期的準(zhǔn)確時鐘。無需RTC模塊。
硬件部件
最后得到了一個非常準(zhǔn)確的時鐘。運行5天后,它沒有問題。
僅使用Arduino的主要問題是其內(nèi)部時鐘速度并非100%準(zhǔn)確。因此,如果僅依賴于此,那么經(jīng)過的毫秒數(shù)將減少一小部分,并且您正在創(chuàng)建的時鐘將丟失或浪費時間。我的方法是測試我使用的Arduino的準(zhǔn)確性,并確定每小時損失或獲得多少毫秒。然后,所需要做的只是對速度調(diào)整進(jìn)行編程,以每小時從內(nèi)部跟蹤的毫秒中增加或減去這種差異。
我的另一個擔(dān)心是Arduino時鐘是否始終不準(zhǔn)確,但是如前所述,我編寫的時鐘在5天內(nèi)保持了非常準(zhǔn)確的時間,因此看來錯誤是一致的。
第二個問題是內(nèi)部millis()函數(shù)每隔50天左右會重置一次,因此您無法操縱毫秒計數(shù)。因此,答案是使用我可以操縱的計數(shù)器替換millis()中斷,該計數(shù)器將計算從午夜起的毫秒數(shù),每天重置一次,以消除任何運行時限制。
為了評估不準(zhǔn)確性,我假設(shè)我的計算機(jī)時鐘以及因此Processing中的millis()是準(zhǔn)確的。因此,我為Arduino創(chuàng)建了一個程序,每隔2秒將一次握手后經(jīng)過的毫秒數(shù)發(fā)送給Processing,并編寫了一個腳本供Processing處理以讀取它并將其與經(jīng)過的毫秒數(shù)進(jìn)行比較,以顯示實時結(jié)果,以及一個小時后的差值。過去。這給出了在一小時內(nèi)丟失或獲得的毫秒數(shù),因此給出了時鐘程序中用于速度調(diào)整的值。
附件提供了Arduino程序的代碼和Processing腳本。