Arduino 即時時鐘 (RTC)
RTC 模組在接收到初始時間輸入後會持續跟蹤時間。此輸入可以來自多個來源(NTP、GPS 等)。RTC 模組通常帶有自己的晶體振盪器,甚至還有自己的電池,因此即使 Arduino 出現電源故障,時間跟蹤也能繼續進行。
電路圖 -
我們將使用 DS3231 模組。它使用 I2C 進行通訊(SDA 和 SCL 線路)。電路圖如下所示:

如您所見,DS3231 的 Vcc 引腳連線到 5V,GND 連線到 GND,SDA 連線到 A4(SDA),SCL 連線到 A5(SCL)。
所需庫
您將需要 ds3231 庫。您可以從 這裡 獲取它。
有關從 GitHub 安裝庫的指南,請參見 這裡。
程式碼演練
程式碼將保持簡單。我們將使用 create.arduino 專案中提供的程式碼。您可以在 這裡 找到它。
我們首先包含 Wire 和 ds3231 庫:
#include <Wire.h> #include <ds3231.h>
如果您檢視 DS3231 庫的原始碼,他們定義了一個 **struct ts**,其中包含各種時間欄位(年份、月份等)。我們將建立此結構型別的一個變數。
struct ts t;
在 setup 中,我們初始化 Wire、DS3231 並設定初始時間。請注意,此初始時間可能來自 GPS、NTP 或其他來源。這裡我們只是為了說明而手動設定它。
void setup() {
Serial.begin(9600);
Wire.begin();
DS3231_init(DS3231_CONTROL_INTCN);
t.hour=12;
t.min=30;
t.sec=0;
t.mday=25;
t.mon=12;
t.year=2019;
DS3231_set(t);
}DS3231_init 中使用的配置 (DS3231_CONTROL_INTCN) 表示中斷控制。ds3231.h 檔案中定義的其他選項為:
// control register bits #define DS3231_CONTROL_A1IE 0x1 /* Alarm 2 Interrupt Enable */ #define DS3231_CONTROL_A2IE 0x2 /* Alarm 2 Interrupt Enable */ #define DS3231_CONTROL_INTCN 0x4 /* Interrupt Control */ #define DS3231_CONTROL_RS1 0x8 /* square-wave rate select 2 */ #define DS3231_CONTROL_RS2 0x10 /* square-wave rate select 2 */ #define DS3231_CONTROL_CONV 0x20 /* Convert Temperature */ #define DS3231_CONTROL_BBSQW 0x40 /* Battery-Backed Square-Wave Enable */ #define DS3231_CONTROL_EOSC 0x80 /* not Enable Oscillator, 0 equal on */
它們的含義可以在 DS3231 資料手冊 的控制暫存器部分找到。透過將模式設定為 DS3231_CONTROL_INTCN,我們處於中斷輸出模式,警報已停用。這意味著 DS3231 的 INT/SQW 引腳上沒有方波輸出或中斷(因為中斷需要啟用警報)。對於本教程的目的,您不必太擔心該引腳。它不用於通常的時間跟蹤。您可以在資料手冊中閱讀更多相關內容。
在迴圈內,我們每秒列印一次時間。您可以在序列監視器上觀察到,時間按預期以 1 秒為步長遞增。
void loop() {
DS3231_get(&t);
Serial.print("Date : ");
Serial.print(t.mday);
Serial.print("/");
Serial.print(t.mon);
Serial.print("/");
Serial.print(t.year);
Serial.print("\t Hour : ");
Serial.print(t.hour);
Serial.print(":");
Serial.print(t.min);
Serial.print(".");
Serial.println(t.sec);
delay(1000);
}
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP