Как вызвать обработчик виртуального пина из программы

Существует обработчик виртуального пина

BLYNK_WRITE(1) { }

Но код внутри этой подпрограммы предполагается вызывать не только через виджет, но и программно.
Как можно запустить эту подпрограмму? Blynk.virtualWrite (1, 1) меняет виджет, но не запускает обработчик.


Кроме того есть еще вопросы.

  1. Ваше меню устроено странно, выбирать скроллом нужный пункт неудобно, проще тыкнуть в него.
  2. Можно уменьшать кнопки до размера светодиода? Тогда их было бы удобно использовать в качестве чекбоксов. А то большие очень.
  3. Плохо, что нельзя присвоить двум виджетам один виртуальный пин. Бывает нужно одну информацию отобразить в разных видах.
    Плюс очень сложно вводить большие значения (например число от 1 до 1000). Слайдером точно не попадешь, степом устанешь щелкать. Пока единственный выход приблизительно попасть слайдером, а потом уточнить степом. Если б они были привязаны к одному пину, было бы удобнее.
  4. В виджете Меню нельзя удалить ненужный пункт вручную, только добавить.
  1. Свайпом в право или влево ,все удаляется !

Спасибо, было не очевидно.

Не совсем понял в чем вопрос.

Пока нельзя уменьшать. Можно только увеличивать размер.

Плохо, что нельзя присвоить двум виджетам один виртуальный пин. Бывает нужно одну информацию отобразить в разных видах.

Есть в планах на будущее пофиксать.

Можно еще использовать терминал с текстовым вводом, в будущем добавим одно текстовое поле. Какие Ваши предложения?

Как можно запустить эту подпрограмму?

Как вариант вынести все тело в отдельные метод:

BLYNK_WRITE(1) {
  write1();
}

Спасибо за ответ!

Привычный варитант, это пролистать меню, а затем выбрать тапом нужный пункт. У вас же надо точно спозиционировать нужный пункт по центру. Реально неудобно.

Ну либо уменьшать, либо чекбоксы сделать. А то беда.

Текстовый ввод уже хорошо. Мои предложения :
1 вариант - совместное использование слайдером и степом одного виртуального пина. Это в любом случае пригодится.
2 вариант - слайдер со стрелочками степа по краям. Вообще круто.

Ну это и приходится делать. Это сильно добавляет путаницы в код. Не логично, что написанную подпрограмму нельзя вызвать из другого места кода.

You can “force” a call from code.

As per the documents :wink:

Blynk.syncVirtual(vPin)
Requests virtual pins value update. The corresponding BLYNK_WRITE handler is called as the result.

Спасибо. Вот это упустил.
Значит, чтобы полноценно нажать на кнопку из кода программы, нужно сделать

Blynk.virtualWrite ( 1 , 1 );
Blynk.syncVirtual ( V1 );

Наверно в этом есть логика, но мне непонятно, зачем так все усложнять.
Еще раз спасибо.

syncVirtual нужен для получения последнего значения из сервера. Иными словами - когда вызывается syncVirtual идет запрос на сервер и результат возващется в BLYNK_WRITE. Но Ваш вопрос про то как вызвать из кода или нет?

Задача - из кода полноценно нажать на кнопку виджета, чтоб и кнопка нажалась (если связь есть, конечно), и обработчик запустился ( даже если связи нет).
В вашем случает придется усложнять код.
Во втором случае результат вроде нужный, но без интернета работать не будет.
П.С.
Я не очень понимаю, кому нужно изменять состояние кнопки, не вызывая ее обработчика.
Видимо Blynk.virtualWrite предназначена больше для пассивных информационных виджетов. А для управляющих виджетов ничего полноценного нет.

Remember, Blynk is an IoT application, it is designed to work with full connection. It is also designed to work WITH existing coding languages, not replace them.

Code, by it very nature, will become more complicated as you make it do things with more flexibility, this is not a fault of Blynk.