эй У меня есть эта проблема, с которой я имел дело в течение последних нескольких дней. У меня есть способ обойти это, но я знаю, что это действительно плохой способ программирования, и я действительно надеюсь, что кто-то может предложить лучший способ сделать это.Arduino Real Time Timer Device
Я пытаюсь получить время от RTC (реального таймера) Я думаю, что это аббревиатура anyway ,,, Его использование DS 1307 IC ,,,,, каждый раз, когда я запускаю и запускаю программу под постоянная мощность, которую он отлично заряжает, но в тот момент, когда я удаляю USB-кабель примерно на 10 секунд, а затем снова подключаюсь, это даст мне эти забавные времена.
Что-то вроде года 2036 и 46 часов и 165 минут действительно просто мусор. Итак, я где-то читал, что на этот раз это всего лишь программный способ сказать, что с устройством нет связи. То, что я действительно не получаю, потому что он постоянно подключен, но эй, что он хочет.
Итак, вот базовый код, который я получил из примера, который пришел с библиотекой. Я думал, потому что нет соединения, просто выполняйте цикл while до тех пор, пока устройство не получит соединение, это хорошо работает, но для загрузки требуется примерно 10 секунд.
Часы реального времени имеет резервный аккумулятор, подключенный и с линиями SCL до A5 и A4 SDA
Как я говорю это работает, но занимает очень много времени, чтобы загрузить и дать мне правильное время.
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup() {
Serial.begin(57600);
Wire.begin();
RTC.begin();
Serial.println("RTC capturing time!");
while (! RTC.isrunning())
{
Serial.println("RTC is NOT running!");
Wire.begin();
RTC.begin();
}
Serial.println("RTC IS running!");
// following line sets the RTC to the date & time this sketch was compiled
// RTC.adjust(DateTime(__DATE__, __TIME__));
}
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(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println();
delay(1000);
}
Выход выглядит так, как будто с LOT больше RTC не работает!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC IS running!
2013/6/11 22:22:0
2013/6/11 22:22:2
2013/6/11 22:22:3
2013/6/11 22:22:4
2013/6/11 22:22:5
, и если я не включать мою идею в то время как петли я получаю действительно перепутались время и дату, как я уже говорил, пока она по какой-то причине не приходит право само по себе.
Пожалуйста, дайте мне знать, если кто-нибудь знает, как лучше решить мою проблему. Я действительно смущен, почему это произойдет.
Код https://github.com/adafruit/RTClib/blob/master/RTClib.cpp#L164 не проверяет, доступны ли какие-либо данные, поэтому, если RTC не был запущен, тогда 'Wire.read() 'будет возвращать -1.Он преобразуется в 0xff при передаче как uint8_t в 'bcd2bin', который также не проверяет ошибочные входы, а просто вычисляет' 0xff - 6 * (0xff >> 4) 'который равен' 255-6 * 15 => 165'. Следовательно, время даты заполняется 165 и другими плохими значениями, если RTC не готов. –