Вопрос по часам ds3231

Тема в разделе "Arduino & Shields", создана пользователем Alex20280, 2 окт 2020.

  1. Alex20280

    Alex20280 Нерд

    Здравствуйте,

    У меня имеются часы 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);
    }
     
     
  2. akl

    akl Гуру

    setDS3231time надо убрать
     
    Andrey12 нравится это.
  3. KindMan

    KindMan Гуру

    Когда подключаете, перезагружается устройство, снова выполняется Setup и выставляется ваши 2:14
     
  4. Alex20280

    Alex20280 Нерд

    То есть, нужно залить скетч с setDS3231time, апотом перезалить его уже без этого метода?
     
  5. asam

    asam Гик

    Ну можно и так, конечно, но уж очень через одно место. Почему просто через сериал порт не дать команду на установку времени? Ну или кнопками.
     
  6. a1000

    a1000 Гуру

    Так получится, только питание не отключайте. Залили ваш скетч, время отобразилось правильно, сразу заливайте скетч без setDS3231time(00,14,02);
    А как вы через Serial дадите команду на DS3231 работающий на I2C?
     
  7. akl

    akl Гуру

    легко.
    просто в программе для ардуины надо прописать чтобы она анализировала приходящее через сериал, и когда придет строчка с нужной командой и временем, разобрала эту строчку на составляющие и загрузила пришедние данные в часы.
    пусть это будет дз для тс
     
    Daniil и Andrey12 нравится это.
  8. asam

    asam Гик

    Через сериал монитор, вестимо. DS3231 же к ардуине подключена.
     
  9. Alex20280

    Alex20280 Нерд

    Всем спасибо! Я установил время и потом перезалил скетч без метода setDS3231time(); и все заработало коректно!
     
  10. parovoZZ

    parovoZZ Гуру

    А когда сядет батарейка, все придётся повторить.