尝试了一下传感器芯片的扩展,没有自己写代码,发现相应的代码开源的很多。我使用的库文件的仓库地址:https://github.com/msparks/arduino-ds1302
电路搭建缺少一个晶振,暂时没有输入,或许这是我最终测试的时候时间不变化的因素。根据我自己的电路,只是改了几个管脚的配置,之后的测试代码:
// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include <stdio.h>
#include <DS1302.h>
namespace
{
// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip. See the DS1302
// datasheet:
//
// http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin = 13; // Chip Enable
const int kIoPin = 28; // Input/Output
const int kSclkPin = 27; // Serial Clock
// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);
String dayAsString(const Time::Day day)
{
switch (day)
{
case Time::kSunday:
return "Sunday";
case Time::kMonday:
return "Monday";
case Time::kTuesday:
return "Tuesday";
case Time::kWednesday:
return "Wednesday";
case Time::kThursday:
return "Thursday";
case Time::kFriday:
return "Friday";
case Time::kSaturday:
return "Saturday";
}
return "(unknown day)";
}
void printTime()
{
// Get the current time and date from the chip.
Time t = rtc.time();
// Name the day of the week.
const String day = dayAsString(t.day);
// Format the time and date and insert into the temporary buffer.
char buf[50];
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
day.c_str(),
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);
// Print the formatted string to serial so we can see the time.
Serial.println(buf);
}
} // namespace
void setup()
{
Serial.begin(9600);
// Initialize a new chip by turning off write protection and clearing the
// clock halt flag. These methods needn't always be called. See the DS1302
// datasheet for details.
rtc.writeProtect(false);
rtc.halt(false);
// Make a new time object to set the date and time.
// Sunday, September 22, 2013 at 01:38:50.
Time t(2019, 5, 6, 1, 38, 50, Time::kSunday);
// Set the time and date on the chip.
rtc.time(t);
}
// Loop and print the time every second.
void loop()
{
printTime();
delay(1000);
}
测试的效果: