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

8
  • Could you provide a link to your WOKWI project? Commented Jan 23 at 10:22
  • I use free version of WOKWI. This is link for my project: file.io/y1XjwyqHjhNk
    – Qmails
    Commented Jan 23 at 10:34
  • The link says “The transfer you requested has been deleted.” Commented Jan 23 at 10:41
  • I shared the file again: easyupload.io/b0e4w8
    – Qmails
    Commented Jan 23 at 10:53
  • What do you mean by "blocked my program"? Commented Jan 23 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);
}

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.