Главная arrow Форум  
22.09.2019 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
В ответ на: Обработка кнопки (в копилку юного разработчика) (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: В ответ на: Обработка кнопки (в копилку юного разработчика)

#7112
Chapa (Пользователь)
Новичок
Постов: 5
graphgraph
Обработка кнопки (в копилку юного разработчика) 19.02.2012 19:55 Репутация: 0  
Каюсь, что идея была давным-давно подсмотрена в проекте Ну совсем маленький термостат (за что ARV'у ввыраю благодарность), где для меня обработка кнопки была слишком непонятной и навороченной. Поэтому написал свой алгоритм.

Двигаясь по пути упрощения устройства и снижения стоимости, выбирается микроконтроллер с минимально достаточным числом портов ввода-вывода для конкретной задачи. И одним из способов уменьшения числа портов является минимизация числа кнопок клавиатуры,.. вплоть до одной. И действительно из одной кнопки можно выжать довольно таки много информации.
В предлагаемом мною алгоритме можно детектировать пять "действий" от одной кнопки.

Опрос состояния кнопки происходит в периодически происходящем прерывании (прерывание от внешнего периодического сигнала, прерывание по таймеру и т.д.). Где происходит установка флага действия action и "режима кнопки" mode при выполнении определенных условий. Основная программа, обнаружив установленный флаг действия action от кнопки, в зависимости от сосбтвенного режима работы и "режима кнопки" mode выполняет действия реакции (перелистывание строк меню, изменение какой-либо переменной и т.д., либо ничего не делает), после чего СБРАСЫВАЕТ флаг действия action (даже если нет никакой реакции в основной программе на определенный "режим кнопки").

"режим кнопки" mode =
1. прошел антижребезг нажатия
2. прошла пауза перед автоповтором или идет автоповтор нажатия
3. отпустили после "короткого" нажатия (во время паузы перед автоповтором)
4. отпустили после "длинного" нажатия (после режима 2)
5. идет автоповтор отпущенного состояния (удобен, например, для автоматического выхода вверх по меню.)

Переменные:
action - флаг действия
mode - режим работы кнопки
pushcnt - счетчик для нажатого состояния
rlscnt - счетчик для отпущенного состояния

Константы:
cp1 - период проверки на антидребезг нажатия
cp2 - пауза перед автоповтором нажатия
cp3 - период автоповтора нажатия
cr1 - автоповтор отпущенного состояния кнопки

Переменные (счетчики), используемые в прерывании, должны быть глобальными и не изменяться в основной программе. Константы-времена (начальные состояния счетчиков) измеряются в периодах прерывания. Например, если прерывание идет с частотой 100Гц, соответственно период прерывания 10мс, а константа cp1=15, то 15*10мс=150мс - время, в течение которого происходит проверка антидребезга нажатия.

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


Содержимое поста отредактировано: Chapa, в: 19.02.2012 19:56
Ален ноби, ностра алис! Что означает - ежели один человек построил, другой завсегда разобрать может! (c) дядя Степан.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#7118
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Обработка кнопки (в копилку юного разработчика) 19.02.2012 22:03 Репутация: 175  
по-моему, надо сопроводить реальным исходником и получится готовая статья.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол