• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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);
что б переодически сверялось
 
Сверху Снизу