DS3231 rtc.begin() всегда возвращает false

Я использую Arduino UNO с модулем RTC DS3231. Я подключил SDA & Выводы SCL RTC DS3231 с Arduino SDA & Выводы SCL рядом с выводом AREF. Модуль RTC также имеет подключенную батарею. Мой код выглядит следующим образом:

#include <RTClib.h>
#include <Wire.h>
RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {
  "Sunday", "Monday", "Tuesday", 
  "Wednesday", "Thursday", "Friday", "Saturday"
};

void setup() {
  Serial.begin(9600);
  Wire.begin();
  delay(3000);
  //rtc.begin();
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
       // Следующая строка устанавливает RTC с явной датой & время
    // например, чтобы установить 27 января 2017 года в 12:56, вы должны позвонить:
    // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
  }
}

void loop() {
  DateTime now = rtc.now();
  Serial.println("Current Date & Time: ");
    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.println("Unix Time: ");
    Serial.print("elapsed ");
    Serial.print(now.unixtime());
    Serial.print(" seconds/");
    Serial.print(now.unixtime() / 86400L);
    Serial.println(" days since 1/1/1970");
    
    // вычислить дату, которая составляет 7 дней & 30 секунд в будущее
    DateTime future (now + TimeSpan(7,0,0,30));
    
    Serial.println("Future Date & Time (Now + 7days & 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.println();
    delay(1000);

}

Выполняя указанную выше команду и открывая Serial Monitor, я всегда получаю следующий вывод:

Couldn't find RTC

Может ли кто-нибудь помочь мне решить эту проблему.

, 👍1

Обсуждение

Вы подключили DS3231 к VCC и подключили ли вы GND модуля DS3231 к GND вашего Arduino? У модуля DS3231 уже есть подтяжки на линиях SDA и SCL?, @StarCat

Да, я подключил DS3231 к VCC и GND с Arduino GND. Как я узнаю, есть ли у модуля DS3231 подтяжки на линиях SDA и SCL., @Sashi Kant

Это должно быть в даташите или на схеме. Другой вопрос: запускали ли вы скетч сканирования I2C или другую библиотеку, чтобы увидеть, виден ли DS3231 для вашего Arduino?, @StarCat

Да, это сработало. На самом деле проблема была в неисправном проводе в соединении ПДД. При проверке сканирования I2C не было обнаружено устройств I2C, затем я проверил соединения и обнаружил, что соединение SDA неисправно. После восстановления модуль RTC работает нормально. Спасибо за поддержку. Хотя чувствую себя очень глупо за такие ошибки., @Sashi Kant

Не стесняйтесь публиковать ответы на свои вопросы, чтобы другим не приходилось читать весь диалог комментариев. Поздравляю, кстати. Простые проблемы иногда самые сложные., @DataFiddler


1 ответ


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

3

В коде нет ошибок. Скорее, это было неправильное соединение, которое мешало работе модуля RTC. Теперь, после восстановления, модуль RTC работает нормально.

,

Вы можете пометить свой вопрос как «отвеченный»., @StarCat