Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 23 авг 2019, 13:21

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 20:12 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
Классный и компактный код, не то что мой. Благодарю за помощь и консультацию.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 20:38 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3780
Откуда: Россия
Будь здоров!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 07 май 2018, 19:10 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
SVN писал(а):
Вообще-то логика работы при использовании нескольких действий (по кратковременному и по длительному нажатию) от одной кнопки, делается всегда по отпусканию.
Позволю себе не согласиться с данным утверждением. Короткое нажатие кнопки должно обрабатываться именно по нажатию кнопки, а не по ее отпусканию.
Пример - электронный секундомер. Если для его запуска или останова ждать отпускания кнопки, то точность измерения времени будет зависеть от настроения хронометриста. В подобных девайсах нужно ловить именно момент нажатия. И для этого совершенно кошерно использовать прерывание INT0, или аналогичное.
А вот для отработки по удержанию требуется отследить как нажатие, так и отпускание кнопки. И здесь INT0 опять будет абсолютно в помощь. Хотя можно обойтись и без него.
Отработка по удержанию кнопки предполагает, что нажатие должно быть не менее какой-то длительности. Например - для рестарта системы требуется нажать, и удерживать кнопку 3-5 секунд.
Как правило, алгоритм программы предполагает определенную временную последовательность коротких и длинных нажатий кнопки. Допустим, сначала система рестартится (сбрасываются данные предыдущих действий), для этого нужно удержание. Затем идут короткие нажатия, запускающие определенные действия или ветви программы. И после выполнения этих действий следует очередной рестарт. Если знать алгоритм выполнения таких действий, то разделить короткие и длинные нажатия не представляет труда.
Библиотечный алгоритм работы с кнопками хорош своей универсальностью, но именно эта универсальность делает его не самым оптимальным с точки зрения кода программы. Так что при решении любой задачи нужно искать компромисс, который обычно лежит между универсальностью и оптимальностью.

В данный момент заканчиваю разработку сложной системы, в которой связаны в сеть около десятка девайсов, каждый из которых выполняет свою роль. В том числе дистанционный запуск электронных секундомеров и фиксацию внешних событий (ошибок прохождения трассы участниками гонки). На каждом девайсе по несколько кнопок. Большинство из них - многофункциональные. По нажатию одной кнопки может генерироваться несколько разных событий или действий. И все это в реал-тайм, с заданной погрешностью не хуже 0,01 сек (фактически - не хуже 0,005 сек). Так вот обсуждаемый здесь библиотечный алгоритм "не пошел", пришлось придумывать свои решения.
Если Ваша задача конкретизирована, пишите, возможно смогу предложить что-то нестандартное.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 08 май 2018, 15:21 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3780
Откуда: Россия
Valentinych писал(а):
Позволю себе не согласиться с данным утверждением.

Это сколько угодно… у каждого есть своё мнение.
Valentinych писал(а):
SVN писал(а):
Вообще-то логика работы при использовании нескольких действий (по кратковременному и по длительному нажатию) от одной кнопки, делается всегда по отпусканию.
Короткое нажатие кнопки должно обрабатываться именно по нажатию кнопки, а не по ее отпусканию.
Пример - электронный секундомер.

Моя ошибка только лишь в слове «всегда»… конечно же не всегда, а в большинстве знакомых мне случаях. В общим каждая конкретная задача определяет тот или иной алгоритм.

Пример Вами выбран правильный… но вот сотни других примеров говорят об обратном.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 18 май 2018, 00:53 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
SVN писал(а):
Valentinych писал(а):
Пример Вами выбран правильный… но вот сотни других примеров говорят об обратном.
Приведите хотя бы несколько примеров, где требуется отработка короткого нажатия по отпусканию кнопки. Да, так можно делать, но это не значит, что это правильно, и так следует делать всегда, или хотя бы в большинстве случаев. Сама логика короткого нажатия говорит об обратном.
Впрочем, это дело каждого...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 18 май 2018, 02:26 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3780
Откуда: Россия
а) Есть кнопка… короткое нажатие включает клаксон, а длинное нажатие включает/выключает освещение салона. Клаксон не должен звучать когда производится управление освещением.
б) Есть кнопка… короткое нажатие включает/отключает освещение, а длинное нажатие включает/отключает вентилятор. Свет не должен включиться или выключится при управлении вентилятором.
в) и т.д.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 25 июн 2018, 15:45 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
Немного подправил код, была выявлена ошибка (обнуление длинного нажатия)


Вложения:
Button.zip [7.25 КБ]
Скачиваний: 38
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB