Здравствуйте, У меня имеются часы DS3231, которые я пытаюсь использовать для проекта. Ниже указан скутч, где я устанавливаю время и проверяю его в мониторе порта. В часы вставлена батарея, к тому же питание все время идет от блока питания 5V. Когда я заливаю скетч и открываю Монитор порта часы идут нормально. Но фишка в том, что когда я отсоединяю USB шнур от com порта и потом снова подключаю его, открываю Монитор порта и часы снова начинают идти с того времени как я их и выставлял. Почему так получается? Возможно я ставлю не там метод timeCheck(); ? Код (C++): #include <Wire.h> #include <DS3231.h> #define DS3231_I2C_ADDRESS 0x68 DS3231 rtc(SDA, SCL); void setup() { Serial.begin(9600); rtc.begin(); setDS3231time(00,14,02); // set the initial time here: DS3231 seconds, minutes, hours, day, date, month, year } void setDS3231time(byte second, byte minute, byte hour) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour)); // set hours Wire.endTransmission(); } void loop() { t = rtc.getTime(); timeCheck(); } void timeCheck (){ Serial.print(t.hour); Serial.print("-"); Serial.print(t.min); Serial.print("-"); Serial.println(t.sec); delay (1000); }
Ну можно и так, конечно, но уж очень через одно место. Почему просто через сериал порт не дать команду на установку времени? Ну или кнопками.
Так получится, только питание не отключайте. Залили ваш скетч, время отобразилось правильно, сразу заливайте скетч без setDS3231time(00,14,02); А как вы через Serial дадите команду на DS3231 работающий на I2C?
легко. просто в программе для ардуины надо прописать чтобы она анализировала приходящее через сериал, и когда придет строчка с нужной командой и временем, разобрала эту строчку на составляющие и загрузила пришедние данные в часы. пусть это будет дз для тс
Всем спасибо! Я установил время и потом перезалил скетч без метода setDS3231time(); и все заработало коректно!