Модуль RTC DS1307 не работает

У меня проблема с RTC: он работает неправильно. Когда я пытаюсь прочитать дату или время, я вижу только символы "àààààààà" или программа заблокирована.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

DS1307 rtc;
DateTime rtcTime;

void setup() {
  //генератор zainicjowanie liczb losowych
  randomSeed(A0); 
  Wire.begin();
  rtc.begin();
}

void loop() {
  rtcTime = rtc.now();
  int mm = rtcTime.minute();
  Serial.println(mm);
  
  delay(500);
}

Эта функция блокирует мою программу:

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

Я не могу найти причину этой проблемы. Я использую Arduino Uno в эмуляторе WOKWI.

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

, 👍2

Обсуждение

Не могли бы вы предоставить ссылку на ваш проект WOKWI?, @Edgar Bonet

Я использую бесплатную версию WOKWI. Это ссылка на мой проект: https://file.io/y1XjwyqHjhNk., @Qmails

По ссылке написано: «Запрошенный вами перевод удален»., @Edgar Bonet

Я снова поделился файлом: https://easyupload.io/b0e4w8, @Qmails

Что вы подразумеваете под «заблокировали мою программу»?, @Rohit Gupta

Где Serial.begin(), определяющий используемую скорость передачи данных? И похоже, что функция timeRTC() в вашей программе не используется, так как же она блокирует программу?, @chrisl

Не отвечает/зависает программа., @Qmails

Я много раз его модифицировал, пытаясь решить проблему, отсюда и недостатки в коде. Я включил в основной пост две функции RTC., @Qmails


1 ответ


Лучший ответ:

2

У вас нет проблем с RTC: если вы вызовете Serial.begin() в setup() и удалите все в вашем loop() после Serial.println(mm); программа работает как положено. Ваша проблема в том в другом месте. Скорее всего у вас портится память, что приводит к непредсказуемое поведение.

Примечание: если вы перейдете на RTClib от Adafruit (в менеджер библиотеки), вы можете упростить timeRTC() до этого:

String timeRTC() {
    return rtc.now().timestamp(DateTime::TIMESTAMP_TIME);
}
,