if () для времени

oz1boy
Offline
Зарегистрирован: 08.12.2017

Стоит задача:

При температуре выше или ровно 27 и времени c [10:00:00 AM до 9:59:59 PM] - включить розетку;

При температуре ниже или ровно 26 и времени c [10:00:00 AM до 9:59:59 PM] - выключить розетку;

При температуре выше или ровно 22 и времени c [10:00:00 PM до 9:59:59 AM] - включить розетку;

При температуре ниже или ровно 21 и времени c [10:00:00 PM до 9:59:59 AM] - выключить розетку.

Тремя звездочками (***) в коде отмечено куда я хочу вставить, то что в квадратных скобках [время].

Не знаю как это сделать, поскажите, пожалуйста.

#include <TimeAlarms.h>
#include <Time.h>
#include <TimeLib.h>
#include <DHT.h>
#include <Wire.h>
#include <DS3231.h>
#define DHTPIN 12
#define DHTTYPE DHT22
#define soket 2
DHT dht(DHTPIN, DHTTYPE);
DS3231 clock;
RTCDateTime dt;
float temp = 0;
float hum = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Initialize DS3231");
  Serial.println("Initialize DHT22");
  Serial.println("Climate Control");
  dht.begin();
  clock.begin();
  pinMode(soketD2, OUTPUT);
  lock.setDateTime(__DATE__, __TIME__);
  digitalWrite(soket, 1);
}

void loop() {
  Alarm.delay(1000);
  dt = clock.getDateTime();
  Serial.print("Time: ");
  Serial.println(clock.dateFormat("jS M Y, g:i:s A", dt));
  Serial.print("Temp: ");
  Serial.print(temp);
  Serial.print(" C; Hum: ");
  Serial.print(hum);
  Serial.println("%");
  temp = dht.readTemperature();
  hum = dht.readHumidity();
  if (isnan(temp) || isnan(hum)) {
    digitalWrite(soket, 1);
    Serial.println("Не удается считать показания с датчика DHT22");
  }
  if (isnan(dt)) {
    digitalWrite(soket, 1);
    Serial.println("Не удается считать показания с датчика DS3231");
    return;
  }
  if ((temp >= 27.0) && (***) && (***)) {
    digitalWrite(soket, 0);
  }
  if ((temp <= 26.0) && (***) && (***)) {
    digitalWrite(soket, 1);
  }
  if (((temp >= 22.0) && (***) && (***)) {
    digitalWrite(soket, 0);
  }
  if ((temp <= 21.0) && (***) && (***)) {
  digitalWrite(soket, 1);
  }
  return;
}

 

oz1boy
Offline
Зарегистрирован: 08.12.2017

Для времени использовал эту библиотеку

https://github.com/jarzebski/Arduino-DS3231

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

Ну, Вы бы хоть компиляции нормальной добились. Что у Вас в 24-ой строке написано?

ven-til
Offline
Зарегистрирован: 13.02.2018

С составлением условий не нужно такой горячки - у вас всего два интервала времени с 10 до 22 часов и с 22 до 10.
То есть нужно одно условие по времени -

если время между 10 и 22  то проверяем температуру >=27 и <= 26

иначе проверяем температуру >=22 и <= 21

или вот так

если время между 10 и 22  то температура hi = 27; low = 26;

иначе температура hi = 22; low = 21;

затем проверям если температура >=hi - включить розетку

если температура <=low - выключить розетку