На этом можно было бы и закончить, но памятуя о несчастных посетителях будущего духовного предводителя коммуналки, облегчим их участь и прикрутим к блоку выход с которого будет выводиться количество нажатий на дисплей рядом с кнопкой звонка.
Вроде бы задача проще простого. Взять переменную Zx и сделать из нее выход. Но не тут-то было. Мы помним, что количество нажатий в переменную Zx записывается только через две секунды после последнего нажатия. Представляете, как будет неудобно. Если нет, попробуйте.
Снова залезаем в библиотечный талмуд и находим функцию
isPress()
.
.
Даная функция дает нам сигнал сразу в момент нажатия. То, что и требовалось. Надо только добавить счетчик. Вы не поверите как просто сделать счетчик в коде! Надо всего лишь добавить одну переменную и условие по которому к этой переменной будет прибавляться единица. Этим условием и будет
isPress()
А с прибавлением единицы в С++ вообще полная демократия. Как только не пишут.
A=A+1;
A=1+A;
A+=1;
A++;
++A;
Все варианты написания прибавят к текущему значению
A единицу. Из них нам точно не подойдет
++A; т.к. он сначала выведет нашу переменную на дисплей а потом прибавит к ней единицу.
Мне больше нравится
A++;
Добавляем в наш блок переменную
Disp в виде integer выхода и пишем код счетчика.
if(Knopka.isPress()) {Disp++;}
Это все!
Теперь при нажатии на кнопку, переменная Disp будет увеличиваться на единицу.
Осталось только сбрасывать это значение, в момент когда Zx будет присвоено значение отличное от ноля и у кого то из соседей сработает звонок.
Подобное действие в нашем коде уже есть.
if(Zx != 0) { Zx = 0;}
Поэтому мы просто добавляем еще одно действие по условию (по аналогии цветы – поцелуй, улыбка)
if(Zx != 0) { Zx = 0; Disp=0;}
К стати, сброс сработает и тогда, когда произойдет ошибочное число нажатий и звонок ни у кого на сработает. При слишком большой паузе между нажатиями значение обнулиться и надо будет заново нажимать на кнопку. (делать вторую попытку). И это хорошо.
Ну и еще один маленький штришок к нашему произведению.
Помните соседку, которая нажала и держит кнопку звонка. Звонок то не зазвенел, а вот единичка на дисплее высветилась. Надо бы сбросить ее в этом случае.
Добавляем и условие (по аналогии из «Прораба» "выше первого
И ниже третьего").
Только в этом случае нам потребуется не
И , а
ИЛИ. Обозначается
ИЛИ знаком
||
Вот так:
if(Zx != 0 || Knopka.isHolded()) { Zx = 0; Disp=0;}
Функцию
Knopka.isHolded() мы так же нашли в описании библиотеки. Она возвращает удержание (длинное нажатие) кнопки.
И вот как теперь выглядит наш основной код:
Knopka.tick(Z);
if (Knopka.hasClicks()) {Zx = Knopka.getClicks();}
if(Zx == Pitetr) {P = 1;} else {P = 0;}
if(Zx == Glasha) {G = 1;} else {G = 0;}
if(Zx == Xxx) {X = 1;} else {X = 0;}
if(Knopka.isPress()) {Disp++;}
if(Zx != 0 || Knopka.isHolded()) { Zx = 0; Disp=0;}
Прибавилась всего пара строчек, а функционал заметно возрос.
На этом мы пока оставим умиротворенных соседей коммуналки. Думаю, в скором времени они обратятся за сервисным обслуживанием.
А сами займемся не обязательным, но очень нужным делом. Напишем описание к нашему блоку. Уверяю, потомки его оценят. Да и мы сами через полгода с трудом будем вспоминать как пользоваться нашим блоком.
.
.
- 24.jpg (20.18 КБ) 4287 просмотров
.
Dryundel©
_________________________________________________________
Отправлено спустя 1 час 3 минуты 14 секунд:
В этой беседе мы рассмотрели библиотеку
GyverButton и познакомились с доброй половиной ее функций.
Для одной единственной кнопки данная библиотека предоставляет весьма обширный функционал.
Ознакомиться с ее возможностями, а так же воспользоваться
конструктором на базе GyverButton в виде блока можно
здесь.
Хочу так же выразить благодарность автору библиотеки
AlexGyver.
На
страницах его сайта вы сможете найти много интересных проектов и обучающего материала. (не реклама)