Модуль 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;
}
@Qmails, 👍2
Обсуждение1 ответ
Лучший ответ:
▲ 2
У вас нет проблем с RTC: если вы вызовете Serial.begin()
в
setup()
и удалите все в вашем loop()
после
Serial.println(mm);
программа работает как положено. Ваша проблема в том
в другом месте. Скорее всего у вас портится память, что приводит к
непредсказуемое поведение.
Примечание: если вы перейдете на RTClib от Adafruit (в
менеджер библиотеки), вы можете упростить timeRTC()
до этого:
String timeRTC() {
return rtc.now().timestamp(DateTime::TIMESTAMP_TIME);
}
,
@Edgar Bonet
Смотрите также:
- Разница между «time_t» и «DateTime»
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Библиотека времени Arduino и библиотеки RTC
- Ошибка модуля часов реального Времени-DS3231
- DS3231 rtc.begin() всегда возвращает false
- Adafruit RTC begin() не возвращает false
- Как установить управляющий регистр в модуле RTC DS3231 для Arduino UNO R3?
- DS3231 Не совпадает время при выключении Arduino
Не могли бы вы предоставить ссылку на ваш проект 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