// Глобальные переменные для состояния клапана, режима работы и времени последнего изменения состояния клапана
unsigned long valveChangeTime = 0;
// Функция для проверки аварийной сигнализации
void checkEmergency() {
// Если состояние клапана не соответствует состоянию обратной связи и прошло больше 2 минут, то включаем аварийную сигнализацию
if (valveState != digitalRead(FEEDBACK_PIN) && millis() - valveChangeTime > 120000) { // Если состояние клапана не соответствует состоянию обратной связи и прошло больше 2 минут...
valveChangeTime = millis();
for (;;){
digitalWrite(EMERGENCY_LED_PIN, HIGH); // ... то включаем светодиод аварийного сигнала
lcd.setCursor(0, 3); // Устанавливаем курсор на начало четвертой строки
lcd.print("EMERGENCY!!!"); // Выводим на LCD дисплей надпись "EMERGENCY!!!"
}
} else { // Если состояние клапана соответствует состоянию обратной связи или прошло меньше 2 минут...
digitalWrite(EMERGENCY_LED_PIN, LOW); // ... то выключаем светодиод аварийного сигнала
lcd.setCursor(0, 3); // Устанавливаем курсор на начало четвертой строки
lcd.print(" "); // Очищаем четвертую строку
}
}
P/S Цикл для себя подключил для наглядности.
Но логика работает 2 мин., после как только дергаю BUTTON_MANUAL_PIN получаю аварию, понимаю, что достаточно незначительная ошибка, но понять не могу.
Похоже про то, как работать с миллис - вы или не читали совсем, или “недочитали”.
Запоминать начало отсчета надо не тут, а там где вы включает -выключаете кран.
И надеюсь, что бесконечный цикл for вставлен исключительно для отладки… потому что я не понял его смысла.
Спасибо, не надо. В своё время норматив по пиву перевыполнил))
Это упрощённый пример. Возможно, Вам ещё надо дописать условие, если в течении времени проверки , значения датчика и ожидаемое состояние клапана, вдруг снова совпадут. Или ещё хуже - датчик изменит показания несколько раз
Это уже выше моих сил на данном этапе познания основ программирования… Чтобы избежать условий которые вы описали, применю костыль в виде увеличения дельты температур. Надеюсь, мы не доживем до того времени, когда уличная температура будет меняться со скоростью 2-3 градуса за 2 минуты)))))
По сути этот код отличается от вашего вчерашнего в одной(но существенной) детали. И это довольно печально, что вы воспринимаете его как нечто абсолютно новое - это заставляет думать. что ни этого, ни даже своего вчерашнего кода - вы совсем не понимаете.
@Дим-мычъ , надеюсь ты понимаешь, что я это пишу не в упрек тебе и твоему коду
Поэтому мой топик в песочнице… Если пофлудить, то смотря на код @Дим-мычъ я вижу свои ошибки и учусь на них (в данном случаи на своих ошибках доходчивее)))), можно было бы конечно в целях обучения просто общими фразами направлять, до тех пор пока не “устал” бы учитель или обучаемый и топик бы распух до неприличия и не факт, что хватило бы терпения у обоих сторон дойти до “конца”))))) Но это моё мнение и оно индивидуально.
М-да в стороне стою курю… Почти готовый коммерческий продукт получается))))) У народа сейчас достаточно много шаровых электрокранов в хозяйстве, если кто задумывается, а что будет если кран закиснет, то купит с обратной связью. Вместо датчика температуры ставь любой другой - давления, обьема, протечки и т.д. и вообще универсальное средство будет. Добавлю реле в разрыв питания элетроклапана, чтобы “авария” носила не только информационный характер, но и исполнительный для безопасности.