I wanted to build a digital clock. But the RTC module is only showing this:
Current Date and time: 2000/0/0 0:0:0
Current Date and time: 2000/0/0 0:0:0
Sometimes, it gives the real time but it shows only single line the correct time then again the above line appears. I moves the wire connections but in vain.
#include "virtuabotixRTC.h"
#define DS1302_CLK_PIN A4
#define DS1302_DAT_PIN A5
#define DS1302_RST_PIN 13
#define CURRENT_SECONDS 45
#define CURRENT_MINUTES 30
#define CURRENT_HOURS 11
#define CURRENT_DAY_OF_WEEK 1
#define CURRENT_DAY_OF_MONTH 6
#define CURRENT_MONTH 11
#define CURRENT_YEAR 2023
virtuabotixRTC RTC(DS1302_CLK_PIN, DS1302_DAT_PIN, DS1302_RST_PIN);
void setup()
{
Serial.begin(9600);
// Once the battery is installed,
// the module stores the value in memory
RTC.setDS1302Time(
CURRENT_SECONDS,
CURRENT_MINUTES,
CURRENT_HOURS,
CURRENT_DAY_OF_WEEK,
CURRENT_DAY_OF_MONTH,
CURRENT_MONTH,
CURRENT_YEAR
);
}
void loop()
{
// Allow updates of variables
RTC.updateTime();
Serial.print("Current Date and time: ");
Serial.print(RTC.year);
Serial.print("/");
Serial.print(RTC.month);
Serial.print("/");
Serial.print(RTC.dayofmonth);
Serial.print(" ");
Serial.print(RTC.hours);
Serial.print(":");
Serial.print(RTC.minutes);
Serial.print(":");
Serial.print(RTC.seconds);
// New line
Serial.println();
// Add one second delay between iterations
delay(1000);
}
Can you please give some advice?
I tried now. The output is:
(unknown day) 2000-00-00 00:00:00
#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 = 12; // Chip Enable
const int kIoPin = A5; // Input/Output
const int kSclkPin = A4; // 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(2013, 9, 22, 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);
}