реклама на сайте
подробности

 
 
> Опрос клавиатуры на С, Как написать компактный и "красивый" код?
Make_Pic
сообщение Jun 23 2018, 05:17
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Опрос клавиатуры на С -> Как написать компактный и "красивый" код?
Дайте pls примеры опроса матрицы клавиш на С (C++ не надо).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Forger
сообщение Jun 23 2018, 06:38
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 23 2018, 08:17) *
Опрос клавиатуры на С -> Как написать компактный и "красивый" код?
Дайте pls примеры опроса матрицы клавиш на С (C++ не надо).

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

Т.е. я жестко разделяю опрос клавиатуры от тех модулей/блоков, которые ждут от нее реакцию.
Примеры приводить не буду, т. к. вы "запретили" тут использовать C++.
Однако, на голом С все описанное выше тоже реализуется, но уже несколько "топорно" и далеко не так "компактно и красиво".
К счастью (кому-то к сожалению) давно не использую подобный инструментарий и поэтому примеров на нем, увы, не сохранилось ((

Добавлю, что использую RTOS, т. к. под ней это реализуется значительно проще: не нужно "колдовать" с таймерами и самодельными генераторами/приемниками событий.

зы. В проектах с одной/двумя кнопками все реализую значительно проще, но аналогично - периодический опрос и сравнение двух состояний: предыдущего и текущего.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 23 2018, 07:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(Forger @ Jun 23 2018, 09:38) *
...
Добавлю, что использую RTOS, т. к. под ней это реализуется значительно проще: не нужно "колдовать" с таймерами и самодельными генераторами/приемниками событий.

зы. В проектах с одной/двумя кнопками все реализую значительно проще, но аналогично - периодический опрос и сравнение двух состояний: предыдущего и текущего.

Я не запрещал, но понимаю, что на плюсах удобнее - приведите свой пример pls!
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 23 2018, 08:05
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 23 2018, 10:20) *
Я не запрещал, но понимаю, что на плюсах удобнее - приведите свой пример pls!

Честно говоря, мне влом "выдерать" его из кода, чтобы было понятно, что тут происходит laughing.gif
Поэтому выше я на словах довольно подробно описал сам принцип.
Имхо, так будет намного понятнее, особенно кто ни разу ничего подобного не делал.

Вообще, стараюсь документировать свой код визуально (использую для этого XMind). Не вдаваясь в нюансы и детали, но чтобы в целом все было все понятно сходу через энное время.
Однако, с клавиатурами пока этого не делал, пока в планах.

Пока копался в исходниках, нашел, что в одном из проектов делал чуть иначе: для работы с некой кнопкой нужно наследовать свой класс от шаблона Button<>,
потом реализовать пару виртуальных методов, где нужно обрабатывать реакцию на отпускание/нажатие. Если реакция, скажем, на отпускание не нужна, то можно вообще не реализовывать соотв. метод.
В моем случае функционал класса кнопки еще умеет и управлять собственной подсветкой: on/off/blink и т. п.
После этого нужно лишь "подключить" этот экземпляр класса к нужной клавиатуре (в одном проекте может быть не одна клавиатура, например, распределенная система).
Цитата(x893 @ Jun 23 2018, 11:03) *
То есть у Вас модули в runtime подписываются/отписываются от событий клавиатуры ?

В принципе, это возможно, но на практике мне пока не приходилось это использовать.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Make_Pic   Опрос клавиатуры на С   Jun 23 2018, 05:17
||- - AlexandrY   RE: Опрос клавиатуры на С   Jun 23 2018, 13:40
||- - Forger   ЦитатаB такая генерация спасает от рутины громозди...   Jun 23 2018, 13:54
|||- - AlexandrY   Цитата(Forger @ Jun 23 2018, 16:54) Отлич...   Jun 23 2018, 14:09
|||- - Forger   Цитата(AlexandrY @ Jun 23 2018, 17:09) Во...   Jun 23 2018, 14:13
|||- - AlexandrY   Цитата(Forger @ Jun 23 2018, 17:13) Друго...   Jun 23 2018, 14:22
|||- - Forger   Цитата(AlexandrY @ Jun 23 2018, 17:22) Та...   Jun 23 2018, 14:29
|||- - AlexandrY   Цитата(Forger @ Jun 23 2018, 17:29) Какие...   Jun 23 2018, 14:43
|||- - Forger   Цитата(AlexandrY @ Jun 23 2018, 17:43) Че...   Jun 23 2018, 14:54
||- - x893   Цитата(AlexandrY @ Jun 23 2018, 16:40) .....   Jun 23 2018, 15:01
||- - Сергей Борщ   QUOTE (x893 @ Jun 23 2018, 18:01) Но это ...   Jun 23 2018, 16:01
||- - AlexandrY   Цитата(Сергей Борщ @ Jun 23 2018, 19:01) ...   Jun 23 2018, 17:25
|- - x893   Цитата(Forger @ Jun 23 2018, 09:38) ... д...   Jun 23 2018, 08:03
- - iliusmaster   Обычно, чтобы ничего постояно не опрашивать, все с...   Jun 23 2018, 17:17
|- - Forger   Цитата(iliusmaster @ Jun 23 2018, 20:17) ...   Jun 23 2018, 18:03
|- - k155la3   Цитата(iliusmaster @ Jun 23 2018, 20:17) ...   Jun 24 2018, 08:23
- - ArtemKAD   Ну развели... Проблема дребезга полностью освещена...   Jun 23 2018, 19:56
|- - Forger   Цитата(ArtemKAD @ Jun 23 2018, 22:56) Ну ...   Jun 23 2018, 20:43
|- - Сергей Борщ   QUOTE (ArtemKAD @ Jun 23 2018, 22:56) For...   Jun 23 2018, 21:07
|- - Forger   Цитата(Сергей Борщ @ Jun 24 2018, 00:07) ...   Jun 23 2018, 21:17
|- - ArtemKAD   Цитата(Сергей Борщ @ Jun 24 2018, 00:07) ...   Jun 23 2018, 23:20
|- - Forger   Цитата(ArtemKAD @ Jun 24 2018, 02:20) Я б...   Jun 24 2018, 06:52
- - ArtemKAD   Импульсную подтяжку еще и на кнопку - знаете вы то...   Jun 24 2018, 07:23
|- - Forger   Цитата(ArtemKAD @ Jun 24 2018, 10:23) Имп...   Jun 24 2018, 08:10
||- - ArtemKAD   Цитата(Forger @ Jun 24 2018, 11:10) Извра...   Jun 25 2018, 22:31
||- - AlexandrY   Цитата(ArtemKAD @ Jun 26 2018, 01:31) Кон...   Jun 26 2018, 05:17
||- - Forger   Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт...   Jun 26 2018, 05:25
||- - iliusmaster   Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт...   Jun 26 2018, 05:30
|||- - =L.A.=   Цитата(iliusmaster @ Jun 26 2018, 08:30) ...   Jun 26 2018, 05:44
||||- - haker_fox   QUOTE (=L.A.= @ Jun 26 2018, 13:44) Писан...   Jun 26 2018, 06:32
||||- - Forger   Имхо, физика процесса тут не очень однозначная: ра...   Jun 26 2018, 06:52
|||- - AlexandrY   Цитата(iliusmaster @ Jun 26 2018, 08:30) ...   Jun 26 2018, 07:42
|||- - Forger   Цитата(AlexandrY @ Jun 26 2018, 10:42) По...   Jun 26 2018, 07:49
|||- - iliusmaster   Цитата(AlexandrY @ Jun 26 2018, 10:42) А ...   Jun 28 2018, 15:55
|||- - AlexandrY   Цитата(iliusmaster @ Jun 28 2018, 18:55) ...   Jun 28 2018, 19:40
|||- - Herz   Цитата(AlexandrY @ Jun 28 2018, 22:40) Ну...   Jun 28 2018, 19:49
||||- - AlexandrY   Цитата(Herz @ Jun 28 2018, 22:49) Коллега...   Jun 28 2018, 20:27
||||- - Forger   Вот еще немного любопытной информации про электрич...   Jun 28 2018, 20:28
|||||- - AlexandrY   Цитата(Forger @ Jun 28 2018, 23:28) Вот е...   Jun 29 2018, 04:36
|||||- - Forger   Цитата(AlexandrY @ Jun 29 2018, 07:36) У ...   Jun 29 2018, 05:08
|||||- - AlexandrY   Цитата(Forger @ Jun 29 2018, 08:08) И не ...   Jun 29 2018, 05:39
|||||- - Forger   Цитата(AlexandrY @ Jun 29 2018, 08:39) Ищ...   Jun 29 2018, 05:50
|||||- - AlexandrY   Цитата(Forger @ Jun 29 2018, 08:50) По-хо...   Jun 29 2018, 06:40
|||||- - Forger   Цитата(AlexandrY @ Jun 29 2018, 09:40) От...   Jun 29 2018, 06:51
|||||- - AlexandrY   Цитата(Forger @ Jun 29 2018, 09:51) Пруфы...   Jun 29 2018, 06:56
|||||- - Forger   Цитата(AlexandrY)Также вам предлагаю помолчать отн...   Jun 29 2018, 07:05
||||- - rx3apf   Цитата(AlexandrY @ Jun 28 2018, 23:27) То...   Jun 28 2018, 20:41
|||||- - AlexandrY   Цитата(rx3apf @ Jun 28 2018, 23:41) Все б...   Jun 28 2018, 20:43
||||- - Herz   Цитата(AlexandrY @ Jun 28 2018, 23:27) С ...   Jun 28 2018, 23:13
|||- - rx3apf   Цитата(AlexandrY @ Jun 28 2018, 22:40) (д...   Jun 28 2018, 20:11
||- - ArtemKAD   Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт...   Jun 28 2018, 14:42
|- - Herz   Цитата(ArtemKAD @ Jun 24 2018, 10:23) Имп...   Jun 24 2018, 09:50
|- - Forger   Цитата(Herz @ Jun 24 2018, 12:50) Греть р...   Jun 24 2018, 10:03
|- - Herz   Цитата(Forger @ Jun 24 2018, 13:03) Напри...   Jun 25 2018, 10:02
|- - Forger   Цитата(Herz @ Jun 25 2018, 13:02) А зачем...   Jun 25 2018, 12:13
|- - AlexandrY   Цитата(Forger @ Jun 25 2018, 15:13) Вы ве...   Jun 25 2018, 12:24
|- - Forger   Цитата(AlexandrY @ Jun 25 2018, 15:24) А ...   Jun 25 2018, 12:32
- - iliusmaster   У музыкантов нужно точно отслеживать длительность ...   Jun 24 2018, 09:30
|- - Forger   Цитата(iliusmaster @ Jun 24 2018, 12:30) ...   Jun 24 2018, 09:38
|- - k155la3   Цитата(iliusmaster @ Jun 24 2018, 12:30) ...   Jun 24 2018, 09:57
- - iliusmaster   Ну раз музыканты это специфика, то вот еще один пр...   Jun 24 2018, 11:11
|- - Forger   Цитата(iliusmaster @ Jun 24 2018, 14:11) ...   Jun 24 2018, 11:21
|- - k155la3   Цитата(iliusmaster @ Jun 24 2018, 14:11) ...   Jun 24 2018, 13:07
|- - Make_Pic   Цитата(k155la3 @ Jun 24 2018, 17:07) Мой ...   Jun 25 2018, 02:06
|- - AlexandrY   Цитата(Make_Pic @ Jun 25 2018, 05:06) Тем...   Jun 25 2018, 08:49
|- - k155la3   Цитата(Make_Pic @ Jun 25 2018, 05:06) Тем...   Jun 25 2018, 09:09
||- - AlexandrY   Цитата(k155la3 @ Jun 25 2018, 12:09) Вот ...   Jun 25 2018, 10:35
|- - arhiv6   Цитата(Make_Pic @ Jun 25 2018, 09:06) Тем...   Jun 27 2018, 05:34
- - k155la3   Цитата(Make_Pic @ Jun 23 2018, 08:17) . ....   Jun 26 2018, 08:41
- - Jenya7   В последних проектах юзаем ADP5589. Изначально я б...   Jun 26 2018, 14:35
|- - Forger   Цитата(Jenya7 @ Jun 26 2018, 17:35) В пос...   Jun 26 2018, 15:24
||- - haker_fox   QUOTE (Forger @ Jun 26 2018, 23:24) Имхо,...   Jun 27 2018, 02:32
|||- - Forger   Цитата(haker_fox @ Jun 27 2018, 05:32) Ну...   Jun 27 2018, 04:35
||- - k155la3   Цитата(Forger @ Jun 26 2018, 18:24) Код в...   Jun 27 2018, 06:36
|- - AlexandrY   Цитата(Jenya7 @ Jun 26 2018, 17:35) В пос...   Jun 27 2018, 05:08
- - haker_fox   QUOTE (Forger @ Jun 27 2018, 12:35) Спорн...   Jun 27 2018, 07:22
- - rx3apf   Напряжение, очевидно, нужно чтобы пробить пленку. ...   Jun 28 2018, 15:59
- - Forger   Цитата(iliusmaster) Цитата(rx3apf) Вот: https://el...   Jun 28 2018, 16:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01519 секунд с 7
ELECTRONIX ©2004-2016