Виртуальное нажатие кнопки
dmsergeevich63 opened this issue · 1 comments
dmsergeevich63 commented
Привет, я бы хотел иметь возможность нажимать на кнопки обрабатываемые 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);
}
GyverLibs commented
Это не будет работать, html кнопка не передаёт состояние кнопки, только клик