if () для времени
- Войдите на сайт для отправки комментариев
Чт, 05/04/2018 - 21:44
Стоит задача:
При температуре выше или ровно 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;
}
Для времени использовал эту библиотеку
https://github.com/jarzebski/Arduino-DS3231
Ну, Вы бы хоть компиляции нормальной добились. Что у Вас в 24-ой строке написано?
С составлением условий не нужно такой горячки - у вас всего два интервала времени с 10 до 22 часов и с 22 до 10.
То есть нужно одно условие по времени -
если время между 10 и 22 то проверяем температуру >=27 и <= 26
иначе проверяем температуру >=22 и <= 21
или вот так
если время между 10 и 22 то температура hi = 27; low = 26;
иначе температура hi = 22; low = 21;
затем проверям если температура >=hi - включить розетку
если температура <=low - выключить розетку