Ошибка модуля часов реального Времени-DS3231
Это не кодовая ошибка, я использую модуль DS3231 RTC с батареей. Когда я купил этот модуль, он отлично работал, а теперь, когда я его использую, время идет отлично. когда я устанавливаю текущее время моего местоположения, оно работает вместе с этим временем, но проблема в том, что когда я отключаю питание моего Arduino Nano и снова, когда я даю питание, я вижу, что время работает с самого начала, я не могу видеть никакого текущего значения времени моего местоположения, но я подключил батарею CR2032 вместе с модулем DS3231? в чем тут проблема? Я тоже сменил другую батарею, но она показывает ту же проблему, что и мой DS32321, не сохранил время, когда я отключаю и снова подключаю питание
Это код, который я использую для установки времени
#include <DS3231.h>
// Init the DS3231 using the hardware interface
DS3231 rtc(SDA, SCL);
void setup()
{
// Setup Serial connection
Serial.begin(115200);
// Раскомментируйте следующую строку, если вы используете Arduino Leonardo
//while (!Serial) {}
// Инициализировать объект rtc
rtc.begin();
// Следующие строки можно раскомментировать, чтобы установить дату и время
rtc.setDOW(WEDNESDAY); // Установить День недели на ВОСКРЕСЕНЬЕ
rtc.setTime(12, 0, 0); // Установите время на 12:00:00 (формат 24 часа)
rtc.setDate(1, 1, 2014); // Установите дату на 1 января 2014 года
}
void loop()
{
// Отправить День недели
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Дата отправки
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Время отправки
Serial.println(rtc.getTimeStr());
// Подождите одну секунду, прежде чем повторить :)
delay (1000);
}
Это код, который я использую, чтобы сделать прерывание
#include <DS3231.h>
int Relay = 4;
DS3231 rtc(SDA, SCL);
Time t;
const int OnHour = 21;
const int OnMin = 46;
const int OffHour = 21;
const int OffMin = 48;
const int On2Hour = 14;
const int On2Min = 54;
const int Off2Hour = 21;
const int Off2Min = 48;
void setup() {
Serial.begin(115200);
rtc.begin();
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}
void loop() {
Serial.println("Time: ");
Serial.print(rtc.getTimeStr());
Serial.print('\n');
Serial.println("Date: ");
Serial.print(rtc.getDateStr());
Serial.print('\n');
t = rtc.getTime();
Serial.print(t.hour);
Serial.print(" hour(s), ");
Serial.print(t.min);
Serial.print(" minute(s)");
Serial.println(" ");
delay (1000);
//can be set lcd display alspo
if(t.hour == OnHour && t.min == OnMin){
digitalWrite(Relay,HIGH);
Serial.println("LIGHT ON");
}
else if(t.hour == OffHour && t.min == OffMin){
digitalWrite(Relay,LOW);
Serial.println("LIGHT OFF");
}
if(t.hour == On2Hour && t.min == On2Min){
digitalWrite(Relay,HIGH);
Serial.println("LIGHT ON");
}
else if(t.hour == Off2Hour && t.min == Off2Min){
digitalWrite(Relay,LOW);
Serial.println("LIGHT OFF");
}
}
2 ответа
Я публикую код, пожалуйста, попробуйте, может быть, он вам поможет
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
Serial.begin(57600);
#ifndef ESP8266
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
}
// When time needs to be re-set on a previously configured device, the
// following line sets the RTC to the date & time this sketch was compiled
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now + TimeSpan(7,12,30,6));
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial.println(" C");
Serial.println();
delay(3000);
}
Загрузите приведенный выше код, а затем загрузите тот же код, просто прокомментируйте следующую часть
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// огда необходимо установить время на новом устройстве или после отключения питания,
// следующая строка устанавливает RTC на дату и время составления этого скетча.
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Эта строка устанавливает RTC с явной датой и временем, например, для установки
// 21 января 2014 года в 3 часа ночи вы бы позвонили:
rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
}
Это сработает, и даже если вы подключите и отключите его от сети, время RTC не сбросится
все ли в порядке с Arduino, @Sharifdeen Ashshak
Нет, это не работает, это показывает ту же проблему, с которой я сталкивался. Я имею в виду, что мой RTC-модуль ds3231 не успевает за временем, когда теряет мощность. но вместе с этим я прикрепил аккумулятор для хронометража, @Sharifdeen Ashshak
Тот же самый приведенный выше код работал для меня, вы проверили напряжение батареи, а также откомментировали часть кода и загрузили его снова?, @Maaz Sk
да , ваш код работает нормально , я тоже поменял новую батарею, но проблема в том, что когда она теряет заряд, она начинается с 2000/0/1, а время начинается с 00.00.01, @Sharifdeen Ashshak
Хорошо, 2000/0/1-это время запуска ds3231, вы проверили напряжение с помощью мультиметра, также проверьте полярность батареи, прежде чем вставлять ее в модуль, и не могли бы вы поделиться фотографией вашего модуля, а также тем, как вы вставили батарею, @Maaz Sk
да, я должен проверить напряжение с помощью мультиметра, но батарея новая, и я правильно подключил батарею. Я не смог отправить изображение через эту платформу, потому что это большой файл, @Sharifdeen Ashshak
Если вы отправите свое электронное письмо, я могу отправить его через это, @Sharifdeen Ashshak
Прикрепите его в своем посте выше, каждый может ответить, даже если я не смогу ответить на него, @Maaz Sk
да, я пробовал, но он содержит большой размер файла, @Sharifdeen Ashshak
Загрузите его [здесь](https://gofile.io/uploadFiles), @Maaz Sk
Используйте любое программное обеспечение для уменьшения размера (разрешение / разрядность / сжатие)., @the busybee
хорошо, вот мое изображение ds3231 https://gofile.io/d/9IkuBr, @Sharifdeen Ashshak
Теперь я проверил свой модуль rtc, он показывает 3,3 В через модуль ds3231, но он не показывает время, @Sharifdeen Ashshak
У меня сейчас нет доступа к моему оборудованию, я вернусь, как только у меня будет доступ к моему оборудованию, вы прокомментировали часть кода, которую я упомянул в приведенном выше коде, и попробовали еще раз, просто хотите знать все возможности, @Maaz Sk
2020/10/19 (понедельник) 10:14:5 с полуночи 1/1/1970 = 1603102445с = 18554д сейчас + 7д + 30с: 2020/10/26 22:44:11 Температура: 33,75 C Это был результат, когда я загрузил ваш код в соответствии с вашей инструкцией, @Sharifdeen Ashshak
⸮⸮:b⸮ ⸮ ⸮\{⸮8k ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ 2000/1/1 (суббота) 0: 0: 5 с полуночи 1/1/1970 = 946684805s = 10957d сейчас + 7d + 30 с: 2000/1/8 12: 30: 11 Температура: 33,75 C это выходное сообщение, когда я отключаю и снова подключаю питание своего Arduino, @Sharifdeen Ashshak
Публикация схемы не является беспорядочным изображением, так как то, как вы ее подключили, показывая все соединения, может устранить многие проблемы. Идеальное программное обеспечение с неправильной конфигурацией оборудования не будет работать идеально., @Gil
Я возьму ДОБЫЧУ, так как я не знаю, с каким модулем у вас возникли проблемы. Извлеките аккумулятор, включите его и измерьте напряжение на клеммах аккумулятора. Если у вас напряжение около 3,2 В, модуль предназначен для зарядки аккумулятора (подумал, что вам, возможно, будет интересно узнать). Выключите питание модуля вставьте аккумулятор, не включайте его и измерьте напряжение батареи на микросхеме. Обязательно проверьте также заземляющую сторону. Я полагаю, вы обнаружите то же самое, что и я: паяное соединение с держателем батареи было открытым, просто добавили немного припоя, и это решило проблему. Я также обнаружил, что линия SCL была разорвана на плате, так что, если я подключу другую сторону, это не сработает. Я добавил перемычку, чтобы исправить это. Я купил несколько штук у азона, но только первый был плохим.
- Установить регистр управления на низкий уровень в ds3231 rtc
- Почему unsigned long переполняется?
- Случайный сброс Arduino Nano
- Проблема понимания того, как запрограммировать DS3231 RTC
- Ведение времени в Arduino
- avrdude ser_open() can't set com-state
- Как сбросить или отформатировать Arduino?
- Разница между «time_t» и «DateTime»
Пожалуйста, поделитесь своим кодом и какой библиотекой вы используете, @Maaz Sk
Я использую библиотеку Ds3231, @Sharifdeen Ashshak
да теперь я загрузил код, @Sharifdeen Ashshak