Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
20.03.2013, 14:04
|
#31
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,961
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от tempora
|
То есть, если пользователь нажал "Тише", а программа считала и выполнила "Громче" - то "и хрен с ним"? Не самое удачное решение...
|
Такого не будет, если для каждой кнопки запоминать "предыдущее" состояние. Тогда пофигу, поймали мы уверенное нажатие или дребезг. А к следующему "тику" все уже устаканится.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
20.03.2013, 14:05
|
#32
|
Прописка
Регистрация: 15.03.2009
Сообщений: 162
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Easyrider83
|
tempora, это все очень хорошо и правильно. Просто чужие коды лопатить утомительно. Важно ведь идея, а не сотня чужих процедур сомнительного происхождения.
|
Сообщение от tempora
|
В некоторых случаях выбор настолько небогат, что лучше-таки "лопатить".
|
Сообщение от baiderin
|
Так пусть и лопатит,кому насоветовали. Главное-напредлагать вариантов,чтобы выбирать или обдумать было что.
|
Ну тише-тише, товарищи! Не надо перебивать друг друга. Все нормально, все хорошо. Всем спасибо за предложения, мнения. Ведь главное, товарищи, плюрализм мнений, кто как считает, так сказать, пусть выскажется, а коллектив рассудит. У каждого свой подход для опроса кнопок. И я с радостью Вас выслушал, ознакомился с точками зрения специалистов, так сказать...Я Вам очень признателен за это...
|
|
|
|
20.03.2013, 14:27
|
#33
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от nml
|
Такого не будет, если ...
|
Слово "если" может очень многое за собой содержать, но его не было.
__________________
There's always more than one way to skin a cat.
|
|
|
|
20.03.2013, 14:46
|
#34
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Бывает алгоритм для кнопки, переносят на "сухой контакт" от релюхи, ну и уж, наконец, на дискретный ввод через опторон.
И вот наступает тот момент .... оптрон начинает "звенеть".
И вот тут то примитивная "борьба с дребезгом" кнопки доставляет доставляет кучу.
|
|
|
|
20.03.2013, 15:10
|
#35
|
Вид на жительство
Регистрация: 29.01.2010
Адрес: Десногорск Смол.обл.
Сообщений: 333
Сказал спасибо: 17
Сказали Спасибо 256 раз(а) в 103 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
опрос кнопки должен быть четким )))
|
|
|
|
20.03.2013, 16:07
|
#36
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Yurkin2007
|
Вот вы говорите "дребезг-антидребезг"... Запускаете счётчики после первого непустого чтения клавы. И когда счётчик достигнет какого-то значения, принимаете решение о нажатии кнопки.
Мне кажется всё это ни к чему. Механический дребезг присущ всем кнопкам, тут спорить трудно. Первые несколько милисекунд (не более 5мс) сигнал от нажатия прыгает вверх-вниз, может создаться ощущение, что пользователь многократно нажал кнопку.
Так опрашивайте клаву с периодом большим, чем дребезг, например 20мс, или 50 раз в секунду. И всего делов-то. Даже если при опросе вы попали область дребезга - то и хрен с ним. Поймали единичку, значит юзер нажал кнопку. Поймали нолик при нажатой кнопке - ничего страшного, через 20 мс поймаем точно единичку. И к следующему опросу дребезг заведомо кончится. И счётчики не нужны.
|
...и каждые 20 мс будем ловить новое нажатие кнопки...
Вот от Вас я меньше всего ожидал такой ахинеи.
|
|
|
|
20.03.2013, 16:54
|
#37
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
У меня микроволновка с энкодером. Сначала работал... Что произойдёт при повороте ручки сейчас - никто сказать не может. Результат программирования по принципу "и хрен с ним".
Я использую программный интегратор для кнопки, для оптрона, для датчика холла. Потому что однообразно и, как выяснилось, и оптроны и холлы могут быть с дребезгом. А они меряют расстояние, причём туда-сюда, вернулись откуда пошли должен быть ноль. Резиновые кнопки от пультов новые имеют дребезг 150мс а старые, бывает, до бесконечности.
Как сделано. Каждая кнопка занимает байт. Там 3 битовых флага ON, UP и DOWN (в младших битах) и счётчик. Нажатая кнопка пусть даёт 1 не нажатая 0.
Раз в 10 мс опрашивается кнопка.
Сбрасываются флаги UP и DOWN.
Если 1 и счётчик!=MAX то:
счётчик++
= MAX/2? поднимается флаг DOWN
› MAX/2? поднимается флаг ON, счётчик = MAX
выход
Если 0 и счётчик›0 то:
счётчик--
= MAX/2? поднимается флаг UP
‹ MAX/2? сбрасывется флаг ONб счётчик=0
Получается, что флаги UP и DOWN соответствуют моменту нажатия/отпускания и живут 1 интервал (10 мс), а флаг ON соответствует состоянию кнопки - нажата/отпущена. В любом месте программы можно вытащить этот байт состояния и посмотреть на кнопку.
Счётчик перещёлкивает в момент MAX/2: получается гистерезис, как в микрике, с пружиной. Любой дребезг не даст случайного срабатывания, только затягивает процесс переключения. Варьируя интервал опроса и разрядность счётчиа, можно получать "тупую" кнопку или "нервную".
Не думайте, что это громоздко: на ассемблере avr это занимает 26 операторов и изменяет 1 регистр, в который помещается значение байта с флагами и счётчиком.
|
|
|
|
20.03.2013, 17:09
|
#38
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от makakus
|
Каждая кнопка занимает байт. Там 3 битовых флага ON, UP и DOWN (в младших битах) и счётчик
|
расскажите, как работаете со счетчиком в полубайте?
|
|
|
|
20.03.2013, 17:22
|
#39
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от omercury
|
будем ловить новое нажатие кнопки
|
Отнюдь, новое нажатие - это когда кнопка была отпущена , а потом снова нажата.
Если юзер нажал и держит, то каждые 20мс будем ловить что кнопка до сих пор нажата и не была отпущена. Стандартно при этом сравнивать предыдущее и текущее состояния кнопки. И если эти состояние не равны, то принимать решение о нажатии кнопки. То есть каждые 20мс делать что-то вроде этого:
PHP код:
|
new_button= ReadKeyBoard();
if(new_button!=old_button)
{
if(new_button›0)new_button_pressed = true;
}
old_button=new_button;
|
|
|
|
|
20.03.2013, 17:30
|
#40
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от makakus
|
поднимается флаг UP ... поднимается флаг DOWN
флаги UP и DOWN ... живут 1 интервал
|
А зачем эти флаги нужны?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:48.
|
|