GyverLibs/EncButton

Виртуальное нажатие кнопки

dmsergeevich63 opened this issue · 1 comments

Привет, я бы хотел иметь возможность нажимать на кнопки обрабатываемые EncButton через Портал, чтобы выполнять одни и те же действия. Это было бы удобно, тк физически эти кнопки еще не подсоединены к МК. Я знаю, есть EncButton<EB_TICK, VIRT_BTN> enc; // виртуальная кнопка но такой подход не позволяет использовать долгое нажатие.

Внизу небольшой пример, того что хотелось бы получить. При нажатии кнопки на портале идёт вызов button_small.heldVirtual() , которая эмулирует нажатие button_small.held() и соответственно срабатывает условие if(button_small.held()) .

#include "EncButton.h"
#include <GyverPortal.h>
GyverPortal portal;

EncButton<INPUT, 1> button_small; 
EncButton<INPUT, 15> button_big;
bool valSwitch;
bool valSwitch2;
// билдер страницы
void build() {
  String s;
  BUILD_BEGIN(s);
  add.THEME(GP_DARK);

  add.AREA_LOG(5);

  add.BUTTON_MINI("btn1", "Открыть заслонку");
  add.BUTTON_MINI("btn2", "Закрыть заслонку");
  add.BREAK();

  add.LABEL("Включать вентилятор при открытии заслонки(долгое нажатие маленькой кнопки): ");
  add.SWITCH("sw1", valSwitch);
  add.BREAK();

  add.LABEL("Открывать заслонку при смыве(долгое нажатие большой кнопки): ");
  add.SWITCH("sw2", valSwitch2);
  add.BREAK();


  BUILD_END();
}

void setup() {
  WiFi.mode(WIFI_STA);
  WiFi.begin("", "");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  portal.attachBuild(build);
  portal.start();
  portal.log.start(30);
}

void loop() {
  portal.tick();

  if (portal.click("btn1")) button_small.clickVirtual(); //эмулирует нажатие кнопки button_small
  if (portal.click("btn2")) button_big.clickVirtual(); //эмулирует нажатие кнопки button_big
  if (portal.click("sw1")) button_small.heldVirtual(); //эмулирует долгое нажатие кнопки button_small
  if (portal.click("sw2")) button_big.heldVirtual(); //эмулирует долгое нажатие кнопки button_big
  
  //будут отрабатывать при нажатии на физические и виртуальные кнопки через Портал
  if (button_small.held())portal.log.println(Ok);
  if (button_big.held())portal.log.println(Ok);
  if (button_big.click())portal.log.println(Ok);
  if (button_small.click()) portal.log.println(Ok);
}

Это не будет работать, html кнопка не передаёт состояние кнопки, только клик