Официальный сайт компании Arduino по адресу arduino.cc
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 - выключить розетку