2

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;
}

enter image description here

ocrdu
1,7953 gold badges12 silver badges24 bronze badges
asked Jan 23, 2024 at 10:15
8
  • Could you provide a link to your WOKWI project? Commented Jan 23, 2024 at 10:22
  • I use free version of WOKWI. This is link for my project: file.io/y1XjwyqHjhNk Commented Jan 23, 2024 at 10:34
  • The link says "The transfer you requested has been deleted." Commented Jan 23, 2024 at 10:41
  • I shared the file again: easyupload.io/b0e4w8 Commented Jan 23, 2024 at 10:53
  • What do you mean by "blocked my program"? Commented Jan 23, 2024 at 10:57

1 Answer 1

2

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);
}
answered Jan 23, 2024 at 11:25

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.