Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Можно и покликать по рекламным ссылкам, так будут больше выплаты. Спасибо за понимание!

Кнопка (Button)

Пользовательские блоки для вывода информации на дисплеи и индикаторы, управления тачскрином, различными клавиатурами, добавления русских шрифтов для вывода на дисплеи типа HD44780
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
Аватара пользователя
Dryundel
Майор
Сообщения: 1019
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 302
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Кнопка (Button)

#1

Сообщение Dryundel » 15.01.2021{, 11:39}

Блок "Кнопка" (Button)
.
2021-01-15_111214.jpg
2021-01-15_111214.jpg (5 КБ) 542 просмотра
.
Это обработчик различных нажатий.
По сути данный блок является конструктором, с помощью которого можно настроить необходимые выходы и функции блока.
Блок генерирует только необходимый для конкретной конфигурации код и ничего лишнего.
Так выглядит блок с максимальным функционаломПоказать
2021-01-15_113613.jpg
.
ВНИМАНИЕ! Удалите из IDE старую библиотеку GyverButton.
.
Типы кнопок:
Поддерживаются кнопки как на дискретных так и на аналоговых входах,

Поддерживаются следующие типы нажатий:
- Одиночный клик
- Двойной клик
- Тройной клик
- и т.д. до 10 кликов
- Удержание (длинное нажатие)
- Одиночный клик + Удержание
- Двойной клик + Удержание
- и т.д. до 10 кликов + Удержание

Доступны следующие функции:
- Подсчет кликов совершенных подряд
- Подсчет кликов совершенных подряд до удержания
- Инкрементный сигнал
- Адресный инкрементный сигнал
- Ускорение инкрементного сигнала

При установке чек-боксов на необходимых сочетаниях и функциях
у блока формируются соответствующие выходы.
.
Кнопка_(Code_-_Professional).ubi
(1.95 МБ) 85 скачиваний
.
Функционал довольно обширный.
Настройка блока должна быть интуитивно понятной. Везде присутствуют комментарии.
Более подробное описание и примеры работы выложу чуть позже.
Последний раз редактировалось Dryundel 15.01.2021{, 11:45}, всего редактировалось 2 раза.
Пользовательские блоки на сайте FLPROG - BLOCK

Аватара пользователя
Dryundel
Майор
Сообщения: 1019
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 302
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Кнопка (Button)

#2

Сообщение Dryundel » 15.01.2021{, 11:39}

Резерв
Пользовательские блоки на сайте FLPROG - BLOCK

Аватара пользователя
Dryundel
Майор
Сообщения: 1019
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 302
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Кнопка (Button)

#3

Сообщение Dryundel » 16.01.2021{, 14:25}

Итак, что же умеет блок «Кнопка»(Button) и как его правильно настроить.

Думаю, что с выбором необходимых выходов, сложности возникнуть не должно. Все просто и интуитивно понятно. В параметрах выбираем те выходы, которые требуются и устанавливаем чек-бокс.

Описание выходов:
Press – любое нажатие на кнопку вызывает на этом входе короткий импульс.
Release – срабатывает всякий раз при отпускании кнопки так же короткий импульс.
1click-10click – на этих выходах появляется короткий импульс при конкретном количестве коротких кликов подряд. При этом пауза между кликами в серии, не должна превышать таймаут межу кликами, который настраивается в соответствующем параметре. Как только пауза между кликами превысит настроенный таймаут межу кликами, серия кликов считается завершенной и это сопровождается импульсом на соответствующем выходе.

Lng – на этом выходе возникает короткий импульс при удержании кнопки. Длительность удержания зависит от настройки параметра «Таймаут ожидания удержания».

Long – этот выход подобен выходу Lng, но в отличии от него, при удержании кнопки дольше времени ожидания удержания, на нем устанавливается логическая единица, которая будет сброшена лишь в момент отпускания кнопки.

Count – счетчик кликов. На этом выходе формируется byte значение, соответствующее количеству совершенных подряд коротких кликов в последней серии. Сброс этого значения может быть осуществлен подачей логической единицы на вход сброса «RCount».

LCount – этот счетчик кликов подобен Count, но считает короткие клики предшествующие удержанию. Сброс значения на этом выходе так же может быть осуществлен со входа «RCount».

Incr – на этом выходе формируются инкрементные импульсы при удержании (длинном нажатии)
.
Что такое инкрементные импульсы.Показать
Инкремент (от англ. increment «увеличение») – увеличение переменной на определенное значение.
Декремент – операция обратная инкременту, уменьшение переменной на определенное значение.
Инкрементные импульсы используются, например, для работы со счетчиками импульсов. В том случае, когда требуется увеличивать значение путем удержания кнопки, выход Incr подключается ко входу счетчика и значение на счетчике начинает увеличиваться (уменьшаться) с частотой инкрементных импульсов.
.
Частота инкрементных импульсов может быть настроена с помощью параметра «Таймаут между инкрементами». Чем меньше это значение, тем выше частота импульсов.
По умолчанию Таймаут между инкрементами 500 мс. Соответственно импульсы формируются два раза в секунду.

Пример использования:
2021-01-16_133830.jpg
.
Кроме этого, в блоке можно настроить ускорение инкремента. Иногда это бывает полезно для увеличения скорости изменения значения.

Принцип действия такой:
Удерживаем кнопку, на выходе начинают генерироваться импульсы с таймаутом 500 мс (2 имп. в сек). Если же кнопка удерживается более 3 сек то таймаут уменьшается до 200 мс и импульсы генерируются уже с частотой 5 имп. в сек.

Для использования ускорения инкремента требуется настроить параметры:
- Инкремент с ускорением (чек-бокс)
- Включение 2й ступени через (по умолчанию 3000мс (3сек))
- Инкрементный таймаут 2й ступени

Incr1- Incr10 – это адресные инкрементные выходы. Работа этих выходов аналогична выходу Incr.
Разница в том, что на каждом из них может формироваться независимый инкрементный сигнал. Осуществляется это путем сочетания коротких и длинного нажатия.
К примеру для генерации инкрементного сигнала на выходе Incr2 требуется 2коротких + удержание.

Все вышеперечисленные возможности справедливы при работе как с дискретными, так и с аналоговыми входами контроллера.
Блок легко настраивается для работы с несколькими кнопками на одном аналоговом входе.
Для этого надо в настройках выбрать Тип входа – Аналоговый, после чего вписать аналоговое значение в параметр «Значение аналогового входа для данной кнопки»
При этом вход блока становится аналоговым (inA).

Подключив несколько таких блоков к одному аналоговому входу можно легко работать с резистивной клавиатурой. Каждой такой кнопке доступны все возможности блока.

Пример подключения:
2021-01-16_140130.jpg
2021-01-16_140130.jpg (26.49 КБ) 406 просмотров
.
Блок имеет встроенный аналоговый антидребезг, что не только влияет на стабильность срабатывания, но и существенно повышает помехоустойчивость при таком подключении.
Параметры антидребезга и полоса пропускания (допуск отклонения) так же могут быть настроены по желанию пользователя.
Последний раз редактировалось Dryundel 18.01.2021{, 11:02}, всего редактировалось 1 раз.
Пользовательские блоки на сайте FLPROG - BLOCK

Аватара пользователя
Dryundel
Майор
Сообщения: 1019
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 302
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Кнопка (Button)

#4

Сообщение Dryundel » 17.01.2021{, 11:01}

Данный пост для начинающих и посвящен работе с дискретными и аналоговыми пинами контроллеров при подключении к ним кнопок.

У любого микроконтроллера большая часть входов (пинов) служат для приема информации. В большинстве своем, контроллеры имеют как дискретные так аналоговые входы.

Дискретный (цифровой) пин.

Такой пин может принимать информацию в виде логического ноля и логической единицы. Контроллеры широкого применения работают с напряжением от 0 до 5 или 3,3 Вольт. Соответственно логической единицей для них будет напряжение близкое к максимальному 5 или 3,3 вольта. Логическим нолем для контроллера будет напряжение близкое к 0 Вольтам.

Если сказать точнее, к примеру, Atmega328 (Arduino MINI, NANO, UNO) будет считать логической единицей напряжение от 3 до 5 В, а нулем – от 0 до 1,5 В. Напряжение от 1,5 до 3 В считается неопределенным. Свыше 5 В на пин подавать нельзя, это выведет МК из строя.

Кроме того, крайне нежелательно оставлять пин неподключенным (неподтянутым) никуда. Это приводит к негативному воздействию помех.

Существует несколько способов подключения к пину кнопки. С подтяжкой к земле или к питанию.
подтяжка осуществляется физически через сопротивление 4,7-10 кОм или программно.
.
Подтяжка пина.jpg
.
В Arduino программно пин можно подтянуть только к питанию. При этом задействуется внутреннее высокоомное сопротивление контроллера.

В FLProg внутреннюю подтяжку можно сделать, установив соответствующий чек-бокс.

При подтяжке пина к питанию, при выключенной кнопке, на пине будет логическая единица.
Этот факт необходимо учитывать и при необходимости инвертировать выход пина в проекте.
.
Подтяжка пина внутренняя.jpg
.
В Arduino NANO цифровыми пинами могут быть D0-D13 и A0-A5
И только A6 и A7 могут быть исключительно аналоговыми.

Аналоговый пин.

В той же Arduino NANO аналоговыми могут быть пины A0-A7.
Как же работает аналоговый пин.
Принцип его работы основан на АЦП (Аналого Цифровом Преобразователе).
Попросту говоря, контроллер измеряет напряжение на аналоговом входе и преобразует его в цифровое значение. Но значение это не в вольтах, а в условных единицах соответствующих разрядности встроенного в контроллер АЦП. В Arduino NANO встроен 10-битный АЦП. Соответственно значение которое выдаст нам контроллер будет в пределах от 0 до 1023.
Зная что контроллер работает с напряжением от 0 до 5 В, не сложно догадаться, что 5 В будет соответствовать значение 1023, а 0 В – значение 0. Получается что разрешение такого АЦП примерно 0,005 В или 5мВ.

Стоит отметить, что разрешение можно повысить, снизив измеряемый диапазон к примеру от 0 до 3 В, Однако для этого потребуется источник опорного напряжения. Этой темы мы пока касаться не будем.

Что же дает нам АЦП при работе с кнопками.
С помощью использования аналогового пина, на один вход можно подключить несколько кнопок. Для этого надо всего лишь собрать многоступенчатый делитель напряжения.
.
Резистивная клавиатура.jpg
.
Именно на таком принципе работают резистивные клавиатуры, к примеру в таком шилде:
.
Шилд с резистивной клавиатурой.jpg
.
При замыкании разных кнопок на такой клавиатуре, на аналоговый пин поступает различное напряжение. А зная какой кнопке соответствует определенное значение АЦП, легко настроить блок «Кнопка» (Button), на нужное значение.

Как узнать какое значение АЦП соответствует той или иной кнопке.
Все достаточно просто. Для этого надо подключить резистивную клавиатуру к нужному пину, загрузить в контроллер элементарный тестовый проект, в котором значение аналогового пина будет передаваться в монитор порта или на дисплей и записать соответствующие значения для каждой из кнопок.

Тестовый проект для монитора порта.
.
Тест кнопок.jpg
Тест кнопок.jpg (10.17 КБ) 302 просмотра
Тест кнопок.flp
(45.48 КБ) 15 скачиваний
.
Дребезг контактов.

Практически все механические кнопки подвержены такому неприятному в электронике фактору как дребезг контактов. Суть проблемы в том, что в момент нажатия на кнопку с механическими контактами возникает микроискра и в этот момент, который измеряется миллисекундами, контроллер может определять несколько замыканий и размыканий. Для борьбы с этим явлением применяют фильтры как на уровне «железа», так и на программном уровне. И те, и другие имеют свои достоинства и недостатки. В данном случае расскажу о программном фильтре.

Антидребезг (так называют программный фильтр) работает следующим образом.
Всякий раз когда контроллер определяет замыкание контакта (логический переход от «0» к «1»), запускается таймер и только в том случае когда значение этого таймера превышает установленное значение, фиксируется нажатие. Благодаря этому, все короткие логические переходы не учитываются. Как правило значение таймера антидребезга составляет 30-80 мс.

В FLProg для того что бы задействовать фильтр антидребезга для цифрового (дискретного) входа, необходимо установить соответствующий чек-бокс.
.
Антидребезг контактов.jpg
Антидребезг контактов.jpg (31.04 КБ) 292 просмотра
.
То же самое справедливо и для аналогового антидребезга, с той лишь разницей что отслеживается не логический переход, а время нахождения значения АЦП в ограниченном диапазоне. В блоке «Кнопка» (Button) за ограничение такого диапазона отвечает параметр «Допуск отклонения значения аналогового входа». К примеру, если аналоговой кнопке назначено значение 560, а допуск отклонения 20, то диапазон соответствия будет от 540 до 580. И только если значение АЦП не будет выходить из данного диапазона в течении времени таймера антидребезга, будет зачтено нажатие. Штатного антидребезга для аналогового входа в FLProg не предусмотрено.
.
Пользовательские блоки на сайте FLPROG - BLOCK

Ответить

Вернуться в «Дисплеи, индикаторы и клавиатуры»