This is not a code error I have been using DS3231 RTC module with battery. When I bought this module It worked perfectly now when I get it to use, The time is running perfectly. when I set the current time of my location, it has been running along with that time but the problem is when I unplug the power of my Arduino Nano and again when I give the power I can see the time is running from its start, I could not see any current time value my location but I have attached CR2032 battery along with DS3231 module? what is the problem with this? I changed another battery too but It shows same problem my DS32321 haven't kept the time when I unplug and re-plug the power
This is the code I'm using for set the time
#include <DS3231.h>
// Init the DS3231 using the hardware interface
DS3231 rtc(SDA, SCL);
void setup()
{
// Setup Serial connection
Serial.begin(115200);
// Uncomment the next line if you are using an Arduino Leonardo
//while (!Serial) {}
// Initialize the rtc object
rtc.begin();
// The following lines can be uncommented to set the date and time
rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAY
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014
}
void loop()
{
// Send Day-of-Week
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Send date
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Send time
Serial.println(rtc.getTimeStr());
// Wait one second before repeating :)
delay (1000);
}
This is the code I'm using to make Interrupt
#include <DS3231.h>
int Relay = 4;
DS3231 rtc(SDA, SCL);
Time t;
const int OnHour = 21;
const int OnMin = 46;
const int OffHour = 21;
const int OffMin = 48;
const int On2Hour = 14;
const int On2Min = 54;
const int Off2Hour = 21;
const int Off2Min = 48;
void setup() {
Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}
void loop() {
Serial.println("Time: ");
Serial.print(rtc.getTimeStr());
Serial.print('\n');
Serial.println("Date: ");
Serial.print(rtc.getDateStr());
Serial.print('\n');
t = rtc.getTime();
Serial.print(t.hour);
Serial.print(" hour(s), ");
Serial.print(t.min);
Serial.print(" minute(s)");
Serial.println(" ");
delay (1000);
//can be set lcd display alspo
if(t.hour == OnHour && t.min == OnMin){
digitalWrite(Relay,HIGH);
Serial.println("LIGHT ON");
}
else if(t.hour == OffHour && t.min == OffMin){
digitalWrite(Relay,LOW);
Serial.println("LIGHT OFF");
}
if(t.hour == On2Hour && t.min == On2Min){
digitalWrite(Relay,HIGH);
Serial.println("LIGHT ON");
}
else if(t.hour == Off2Hour && t.min == Off2Min){
digitalWrite(Relay,LOW);
Serial.println("LIGHT OFF");
}
}
-
Can you please share your code and which library are you usingMaaz Sk– Maaz Sk2020年10月19日 04:37:28 +00:00Commented Oct 19, 2020 at 4:37
-
I'm using Ds3231 librarySharifdeen Ashshak– Sharifdeen Ashshak2020年10月19日 05:20:23 +00:00Commented Oct 19, 2020 at 5:20
-
yeah now I have uploaded the codeSharifdeen Ashshak– Sharifdeen Ashshak2020年10月19日 05:24:52 +00:00Commented Oct 19, 2020 at 5:24
2 Answers 2
I am posting a code please try it may be it can help you
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
Serial.begin(57600);
#ifndef ESP8266
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
}
// When time needs to be re-set on a previously configured device, the
// following line sets the RTC to the date & time this sketch was compiled
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now + TimeSpan(7,12,30,6));
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial.println(" C");
Serial.println();
delay(3000);
}
Upload the above code and then upload the same code just comment the following part
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
}
This will work and even if you plug and unplug it from power the RTC time will not reset
-
is it ok with ArduinoSharifdeen Ashshak– Sharifdeen Ashshak2020年10月19日 05:27:13 +00:00Commented Oct 19, 2020 at 5:27
-
No, it's not working, It shows the same problem that I have been facing. I mean my RTC module ds3231 does not keep time when it loses it power. but I have attached timekeeping battery along with thatSharifdeen Ashshak– Sharifdeen Ashshak2020年10月19日 05:44:16 +00:00Commented Oct 19, 2020 at 5:44
-
The same above code was working for me have you checked the voltage of the battery and also have you uncommented the part of the code and uploaded it again?Maaz Sk– Maaz Sk2020年10月19日 05:46:42 +00:00Commented Oct 19, 2020 at 5:46
-
yeah , your code is working fine , I changed the new battery too, but the problems is when it loses it power it starts from 200001 and the time is starting with 00.00.01Sharifdeen Ashshak– Sharifdeen Ashshak2020年10月19日 06:06:52 +00:00Commented Oct 19, 2020 at 6:06
-
Okay 200001 is the starting time of ds3231, have you checked the voltage using multimeter check the polarity of the battery also before inserting it in the module and can you please share the picture of your module and also how have you inserted the batteryMaaz Sk– Maaz Sk2020年10月19日 06:19:24 +00:00Commented Oct 19, 2020 at 6:19
I will take a SWAG as I do not know what module you are having problems. Remove the battery, power it up and measure the voltage at the battery terminals. If you have about 3.2V the module is designed to charge the battery (thought you might like to know). Power down the module insert the battery, do not power it up, and measure the battery voltage at the chip. Be sure to also check the ground side. I believe you will find the same thing I did, the solder connection to the battery holder was open, just added some solder and that solved it. I also found the SCL line was broken on the board so if I connected the other side it would not work. I added a jumper to fix it. I purchased several from azon but only the first one was bad.
Explore related questions
See similar questions with these tags.