0
Under review

Длительное нажатие кнопки

olegdax 3 months ago • updated by Vladimir Ovchinnikov 3 months ago 5

Здравствуйте.

Необходимо из KNX обрабатывать длительное нажатие входного сигнала морганием кнопки.

Как я понимаю, через IR.EVENT_TAG_CHANGE можно отследить нужный Feedback. (в теле обработчика сравнивать name c нужным названием feedback).

А как отследить длительное нажатие (более 1 минуты, например) и отображать в интерфейсе при этом моргание кнопки (изменение цвета фона раз в секунду, например)?

Under review

Добрый день.

Используйте для нужной кнопки события EVENT_ITEM_PRESS и EVENT_ITEM_RELEASE. В каждом из них получайте текущее время и если разница между событиями 1 минута или более, то вызывайте нужную функцию. В функции можете отправлять команду, изменять состояние графического элемента и т. д.

+2

Есть еще вариант
В прессе создаешь таймер на минуту, через минуту он начнет работать
В релизе его удаляешь
По идее, если нажатие меньше минуты, он не успеет сработать и будет удален

Вариант с получением времени по нажатию и отпусканию кнопки (в примере 8 секунд).

hold_timer.irpz

Спасибо за идею и за код!

А если мне надо анализировать состояние сигналов с KNX (например, два бинарных сигнала signal1 и signal2) и дальше делать действия в зависимости от их состояния, это должно выглядеть как-то так?

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice ("iRidium Server"), function (name, value)
{
   sig1 = IR.GetDevice ("iRidium Server").GetFeedback("signal1");
   sig2 = IR.GetDevice ("iRidium Server").GetFeedback("signal2");

   if (sig1 ==1 && sig2 ==1) {

       ....

   }

}

Добрый день.

Верно, нужно использовать EVENT_TAG_CHANGE. Условие имеет смысл написать так:

if ((sig1 ==1) && (sig2 ==1))

{

// какое-то действие

}