#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
// 初始化DS1307
RTC_DS1307 rtc;
// 初始化LCD (RS, EN, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 10, 9, 8, 4);
// LED设置
const int ledPin = 2; // LED接数字引脚2
bool ledState = false; // LED状态跟踪
void setup() {
Serial.begin(9600);
// 初始化LED引脚
pinMode(ledPin, OUTPUT);
// 初始化LCD
lcd.begin(16, 2);
lcd.print("Initializing...");
// 初始化RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
lcd.clear();
lcd.print("RTC Error!");
while (1);
}
// 检查RTC是否运行
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// 设置编译时间为初始时间
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// 清除LCD并显示初始信息
lcd.clear();
lcd.print("Clock Ready");
delay(1000);
}
void loop() {
// 获取当前时间
DateTime now = rtc.now();
// 控制LED闪烁
ledState = !ledState; // 切换LED状态
digitalWrite(ledPin, ledState ? HIGH : LOW);
// 格式化日期和时间字符串
char dateString[20];
char timeString[20];
snprintf_P(dateString,
sizeof(dateString),
PSTR("%04u-%02u-%02u"),
now.year(),
now.month(),
now.day());
snprintf_P(timeString,
sizeof(timeString),
PSTR("%02u:%02u:%02u"),
now.hour(),
now.minute(),
now.second());
// 在LCD上显示
lcd.setCursor(0, 0);
lcd.print("Date: ");
lcd.print(dateString);
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(timeString);
// 每秒更新一次
delay(1000);
}