• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Непонятка по виджету TimeInput

В процессе написания кода для автополивалки столкнулся с такой странностью:
беру пример AdvancedTimeInput, корректирую под свои нужды, а именно - мне необходимо что бы в выбранные дни недели в определенное время запустился насос. Хотел реализовать это кодом
[fleft][/fleft] BLYNK_WRITE(V10) {
TimeInputParam t(param);
for (int i = 1; i <= 7; i++) {
if (t.isWeekdaySelected(i)){ // если настал выбранный день недели
if (t.hasStartTime()){ // и подошло выбранное время
digitalWrite(rele1, HIGH); // запускаем насос
led1.on(); // и прочее
Blynk.notify("Alarm!!");}}} // и прочее[fright][/fright]
Всё, использовать установки времени окончания мне не нужно, поэтому в виджете я это отключил.
То есть от блинка мне нужно только время старта.

НО как только я устанавливаю время и день недели в виджете на пару минут вперед, что б проверить, он делает вид, что событие уже настало (запускает насос и индикатор сразу).

двигал часы, дни вперед- назад -- реакция та же.
Почему блинк думает что моё событие уже настало?
 

Chatlanin

New member
hasStartTime возвращет true когда время старта виджета установлено. Тоесть не пустое. Поэтому у вас и срабатывает полив. Нужно сравнивать с текущим временем установленное.
 
кажется понял, спасибо.
Я переведу заданное время в число и сравню его числом реального времени. Причем делать это нужно раз в секунду. Щас попробую заскетчить
 

Chatlanin

New member
BLYNK_WRITE(V10) {
TimeInputParam t(param);
for (int i = 1; i <= 7; i++) {
if (t.isWeekdaySelected(i)){ // если настал выбранный день недели
long tm = param[0].asLong();
if (tm >= Now){ // и подошло выбранное время
digitalWrite(rele1, HIGH); // запускаем насос
led1.on(); // и прочее
Blynk.notify("Alarm!!");}}} // и прочее
.....
Примерно так. В Now должно быть текущее время. Можно взять его из WidgetRTC.h
 
спасибо, заработало
только я еще void poliv() прикрутил и пару таймеров как с примере часов:
timer.setInterval(10000L, clockDisplay);
timer.setInterval(5000L, poliv);
что б переодически сверялось
 
Сверху Снизу