Имеется полив газона. Полив в 11-00 включается и в 16-00 выключается по времени. Включение отключение работает на Arduino + DS3231.
Включение/выключение реализовано следующим кодом:
Relay1() - Функция запускающая полив
Relay2() - функция выключающая полив
Появилось желание выключать полив или вообще не включать, если идёт дождь. Как только дождь прекращается, но если 16-00 не наступило, полив должен включиться.
Для обнаружения дождя применён датчик протечки + LM393.
Показание с датчика считывается с цифрового пина, состояние HIGH (датчик сухой) и LOW (идёт дождь).
int val = readRain(); - присваивает переменной val состояние HIGH или LOW.
Вопрос: Как правильно организовать алгоритм включение/выключение полива, в зависимости от того, идёт дождь или нет.
if (tm.Hour == 11 && tm.Minute == 00 && val == HIGH) { // если 11-00 и нет дождя, то полив включается
Relay1();
}
if (val == LOW) { // если появляется дождь, то полив выключается
Relay2();
}
if (tm.Hour == 16 && tm.Minute == 00) { // если 16-00, то полив выключается
Relay2();
}
Проблема в том, как включить вновь полив, если закончился дождь, но не наступило 16-00?
int h1 = 11;
int h2 = 16;
int m1 = 5;
int m2 = 45;
Что бы не лазить постоянно и не исправлять часы и минуты по всему коду, присвоил нужные значения переменным.
Включение полива в примере будет в 11:05, выключение в 16:45.
if (val == HIGH){
if (h2 > tm.Hour >= h1){
if (tm.Minute >= m1){
Relay1();
}
}
else {
if (tm.Minute >= m1){
Relay2();
}
else {
Relay1();
}
}
}
else {
Reley2();
}
В школьном учебнике арифметики? Рассуждайте логически. В сутках 24 часа, в часе - 60 минут. Значит в сутках 24*60=1440 минут. Соответственно, любой момент времени можно представить, как количество минут, прошедших после полуночи. Т.е. 11:05 можно представить как 665 минут, 16:45 - как 1005 минут. И с этими числами уже работать.
ЗЫ: по аналогии, в сутках 86400 секунд (если нужна точность до секунды)
Почему моя схема и код не будут работать? Буду смотреть в сторону считать время в минутах, но так же хотелось знать, почему мой пример не рабочий? Я проверил с разными входными данными, код рабочий.