I have a problem with an RTC: it doesn't work correctly. When I try to read date or time, I only see the characters "àààààààà" or or the program is blocked.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
DS1307 rtc;
DateTime rtcTime;
void setup() {
//zainicjowanie generatora liczb losowych
randomSeed(A0);
Wire.begin();
rtc.begin();
}
void loop() {
rtcTime = rtc.now();
int mm = rtcTime.minute();
Serial.println(mm);
delay(500);
}
This function blocks my program:
String timeRTC(){
DateTime now = rtc.now();
String Hour = "0" + String(now.hour());
String Minutes = "0" + String(now.minute());
String Seconds = "0" + String(now.second());
if (Hour.length() == 3) {
Hour = Hour.substring(1);
}
if (Minutes.length() == 3) {
Minutes = Minutes.substring(1);
}
if (Seconds.length() == 3) {
Seconds = Seconds.substring(1);
}
return Hour+":"+Minutes+":"+Seconds;
}
I can't find what is causing this problem. I use an Arduino Uno in the WOKWI emulator.
String dateRTC(){
DateTime now = rtc.now();
String Day = "0" + String(now.day());
String Month = "0" + String(now.month());
String Year = String(now.year());
if (Day.length() == 3) {
Day = Day.substring(1);
}
if (Month.length() == 3) {
Month = Month.substring(1);
}
return Day+"-"+Month+"-"+Year;
}
String timeRTC(){
DateTime now = rtc.now();
String Hour = "0" + String(now.hour());
String Minutes = "0" + String(now.minute());
String Seconds = "0" + String(now.second());
if (Hour.length() == 3) {
Hour = Hour.substring(1);
}
if (Minutes.length() == 3) {
Minutes = Minutes.substring(1);
}
if (Seconds.length() == 3) {
Seconds = Seconds.substring(1);
}
return Hour+":"+Minutes+":"+Seconds;
}
-
Could you provide a link to your WOKWI project?Edgar Bonet– Edgar Bonet2024年01月23日 10:22:31 +00:00Commented Jan 23, 2024 at 10:22
-
I use free version of WOKWI. This is link for my project: file.io/y1XjwyqHjhNkQmails– Qmails2024年01月23日 10:34:33 +00:00Commented Jan 23, 2024 at 10:34
-
The link says "The transfer you requested has been deleted."Edgar Bonet– Edgar Bonet2024年01月23日 10:41:46 +00:00Commented Jan 23, 2024 at 10:41
-
I shared the file again: easyupload.io/b0e4w8Qmails– Qmails2024年01月23日 10:53:55 +00:00Commented Jan 23, 2024 at 10:53
-
What do you mean by "blocked my program"?Rohit Gupta– Rohit Gupta2024年01月23日 10:57:46 +00:00Commented Jan 23, 2024 at 10:57
1 Answer 1
You don't have a problem with the RTC: if you call Serial.begin()
in
setup()
, and remove everything in your loop()
after
Serial.println(mm);
, the program works as expected. Your problem is
elsewhere. Most likely you are corrupting memory, which leads to
unpredictable behavior.
Side note: if you switch to Adafruit's RTClib (called simply "RTClib" in
the library manager), you can simplify timeRTC()
to this:
String timeRTC() {
return rtc.now().timestamp(DateTime::TIMESTAMP_TIME);
}