ds3231 не запоминают время

Juzzo
Offline
Зарегистрирован: 06.03.2018

ds3231 не запоминают время, при каждом включении отображается время при котором я залил прошивку в ардуино.

Модуль менял, батарейку тоже менял.

#include <TimeAlarms.h>
#include <Time.h>
#include <TimeLib.h>
#include <DHT.h>
#include <Wire.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 12
#define DHTTYPE DHT22

#define soketD2Tup 2
#define soketD3Tdown 3
#define soketD4Hup 4
#define soketD5Hdown 5

DHT dht(DHTPIN, DHTTYPE);
float tem = 0;
float hum = 0;

DS3231 clock;
RTCDateTime dt;

LiquidCrystal_I2C lcd(0x27, 16, 2);

byte degree[8] =
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};

void setup()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.createChar(5, degree);
  Serial.println("LCD1602");
  clock.begin();
  Serial.println("DS3231");
  dht.begin();
  Serial.println("DHT22");
  clock.setDateTime(__DATE__, __TIME__);
  THsetup();
  delay(1000);
}

void THsetup()
{
  pinMode(soketD2Tup, OUTPUT);
  pinMode(soketD3Tdown, OUTPUT);
  pinMode(soketD4Hup, OUTPUT);
  pinMode(soketD5Hdown, OUTPUT);
  digitalWrite(soketD2Tup, 1);
  digitalWrite(soketD3Tdown, 1);
  digitalWrite(soketD4Hup, 1);
  digitalWrite(soketD5Hdown, 1);
}

void loop()
{
  tem = dht.readTemperature();
  hum = dht.readHumidity();
  dt = clock.getDateTime();
  Serial.println(clock.dateFormat("d M  h:i A", dt));
  Serial.println(tem, 1);
  Serial.println(hum, 0);
  Tup();
  Tdown();
  Hup();
  Hdown();
  lcdprint();
  delay(1000);
}

void lcdprint()
{
  lcd.setCursor(0, 0);
  lcd.print(tem, 1);
  
  lcd.setCursor(4, 0);
  lcd.write((byte)5);
  
  lcd.setCursor(0, 1);
  lcd.print(hum, 0);
  
  lcd.setCursor(2, 1);
  lcd.print("%");

  lcd.setCursor(10, 0);
  lcd.print(clock.dateFormat("d M", dt));

  lcd.setCursor(10, 1);
  lcd.print(clock.dateFormat("H:i", dt));

  if ((dt.hour >= 16) || (dt.hour >= 0) && (dt.hour < 10))
  {
    lcd.setCursor(6, 0);
    lcd.print("Day");
  }
  else
  {
    lcd.setCursor(4, 1);
    lcd.print("Night");
  }
  
}

void Tup()
{
  if ((tem >= 26.0) && ((dt.hour >= 16) || (dt.hour >= 0) && (dt.hour < 10)))
  {
    digitalWrite(soketD2Tup, 1);
    Serial.println("heater off");
  }
  if ((tem >= 25.0) && ((dt.hour >= 16) || (dt.hour >= 0) && (dt.hour < 10)))
  {
    digitalWrite(soketD2Tup, 0);
    Serial.println("heater on");
  }
  if ((tem >= 21.0) && (dt.hour >= 10) && (dt.hour < 16))
  {
    digitalWrite(soketD2Tup, 1);
    Serial.println("heater off");
  }
  if ((tem <= 20.0) && (dt.hour >= 10) && (dt.hour < 16))
  {
    digitalWrite(soketD2Tup, 0);
    Serial.println("heater on");
  }
}

void Tdown()
{
  if ((tem >= 27.0) && ((dt.hour >= 16) || (dt.hour >= 0) && (dt.hour < 10)))
  {
    digitalWrite(soketD3Tdown, 0);
    Serial.println("fan on");
  }
  if ((tem >= 26.0) && ((dt.hour >= 16) || (dt.hour >= 0) && (dt.hour < 10)))
  {
    digitalWrite(soketD3Tdown, 1);
    Serial.println("fan off");
  }
  if ((tem >= 22.0) && (dt.hour >= 10) && (dt.hour < 16))
  {
    digitalWrite(soketD3Tdown, 0);
    Serial.println("fan on");
  }
  if ((tem <= 21.0) && (dt.hour >= 10) && (dt.hour < 16))
  {
    digitalWrite(soketD3Tdown, 1);
    Serial.println("fan off");
  }
}

void Hup()
{
  if (hum >= 60.0)
  {
    digitalWrite(soketD4Hup, 1);
    Serial.println("humidifier off");
  }
  if (hum <= 50.0)
  {
    digitalWrite(soketD4Hup, 0);
    Serial.println("humidifier on");
  }
}

void Hdown()
{
  if (hum >= 50.0)
  {
    digitalWrite(soketD5Hdown, 0);
    Serial.println("dehydrator on");
  }
  if (hum <= 40.0)
  {
    digitalWrite(soketD5Hdown, 1);
    Serial.println("dehydrator off");
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вот это ни о чем не говорит:   clock.setDateTime(__DATE__, __TIME__); ?

Juzzo
Offline
Зарегистрирован: 06.03.2018

Эта команда устанавливает время, которое на компьюторе в часы, что с ней не так?

b707
Offline
Зарегистрирован: 26.05.2017

Juzzo пишет:

Эта команда устанавливает время, которое на компьюторе в часы, что с ней не так?

нет, она каждый раз устанавливает время на время. "когда вы залили прошивку в ардуино"

sadman41
Offline
Зарегистрирован: 19.10.2016

Да с ней-то все так. Вопрос к вам - чего вы ожидаете, каждый раз при включении устанавливая одно и то же время и дату?

Juzzo
Offline
Зарегистрирован: 06.03.2018

Я не заливаю прошивку каждый раз, вообще-то

Я включаю с блока питания и каждый раз одно и то же вермя - время когда я залил прошивку :\

Juzzo
Offline
Зарегистрирован: 06.03.2018

Ожидаю, что она установит мне время и дальше когда я буду включать напрямую через блок питания у меня будет идти время с того момента

b707
Offline
Зарегистрирован: 26.05.2017

Juzzo пишет:

Я включаю с блока питания и каждый раз одно и то же вермя - время когда я залил прошивку :\

ну все верно - так и должно быть с этой командой

Juzzo
Offline
Зарегистрирован: 06.03.2018

Вас понял, действительно так

b707
Offline
Зарегистрирован: 26.05.2017

Juzzo пишет:

Ожидаю, что она установит мне время и дальше когда я буду включать напрямую через блок питания у меня будет идти время с того момента

Похоже, вы не въезжаете.

Эта команда аналогична тому, что если б вы написали в скетче "Каждый раз при включении устанавливать дату 1 января". Если включить ардуину 1 января - это будет верно, но когда вы ее включите второго - на ней снова будет первое...

Так понятно?

sadman41
Offline
Зарегистрирован: 19.10.2016

Juzzo пишет:

Ожидаю, что она установит мне время и дальше когда я буду включать напрямую через блок питания у меня будет идти время с того момента

Она так и делает - устанавливает время компиляции каждый раз, когда ее вызывают. Вас же не удивляет, надеюсь, тот факт, что при каждом включении выполняется Serial.println("LCD1602"); ?

Залейте прошивку с ней, потом закомментируйте установку времени и залейте еще раз.

nik182
Offline
Зарегистрирован: 04.05.2015

Именно. Прошивка устанавливает время компиляции. После первого запуска надо загрузить прошивку с закомментированной строкой 48.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Только не "возвращайте всё назад" если вдруг Вам покажется, что не помогло. Всё, что тут написали - правильно, просто это может оказаться не единственной проблемой.