Вопросы по ВМ NL1

Re: Вопросы по ВМ NL1

Сообщение A.Sukhoy » 28 окт 2009, 20:22

В 3 утра у меня такие вопросы не стояли :smile:
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Вопросы по ВМ NL1

Сообщение ArtemG » 20 дек 2009, 15:14

Вопрос по поводу обработки коротких и длительных нажатий клавиш. Например нам нужно при коротком нажатии выполнять одни действия, а при длительном другие. Наиболее простой вариант для программиста был бы проверять флаг BTN_UP и выполнять действия для короткого нажатия если он установлен, и LONG_BTN_UP для длительного. Однако при такой реализации при длительном нажатии устанавливается флаг короткого нажатия тоже, причем потом повторяется в соответствии с автоповтором. В этом случае реализация значительно усложняется. Как быть?
ArtemG
 
Сообщения: 67
Зарегистрирован: 27 июн 2008, 23:12

Re: Вопросы по ВМ NL1

Сообщение Рустам » 20 дек 2009, 16:45

При нажатой кнопке флаги длинных и коротких нажатий генерируются генерируются одновременно, но с разные периодом. Можно считывать оба флага и при наличии флага длинного нажатия флаг короткого нажатия маскировать.
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

Re: Вопросы по ВМ NL1

Сообщение ArtemG » 20 дек 2009, 16:53

Рустам писал(а):При нажатой кнопке флаги длинных и коротких нажатий генерируются генерируются одновременно, но с разные периодом. Можно считывать оба флага и при наличии флага длинного нажатия флаг короткого нажатия маскировать.

Но при этом перед обработкой длительного нажатия сработают 2 обработки короткого.
ArtemG
 
Сообщения: 67
Зарегистрирован: 27 июн 2008, 23:12

Re: Вопросы по ВМ NL1

Сообщение Рустам » 20 дек 2009, 17:04

ArtemG писал(а):Но при этом перед обработкой длительного нажатия сработают 2 обработки короткого.

Если программа находится в том месте, где ей важны оба флага, то да, короткие нажатия будут возникать чаще. Какой у вас вариант?
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

Re: Вопросы по ВМ NL1

Сообщение ArtemG » 20 дек 2009, 17:11

№7
ArtemG
 
Сообщения: 67
Зарегистрирован: 27 июн 2008, 23:12

Re: Вопросы по ВМ NL1

Сообщение ArtemG » 20 дек 2009, 17:16

В моем варианте нужно при длительном нажатии увеличивать десятки, при коротком единицы. При длительном удержании получается что увеличивается вначале единицы, потом увеличиваются десятки. Можно сделать чтобы увеличивались единицы 2 раза, потом увеличение на 8, но все равно это не идеал.
ArtemG
 
Сообщения: 67
Зарегистрирован: 27 июн 2008, 23:12

Re: Вопросы по ВМ NL1

Сообщение Рустам » 20 дек 2009, 17:58

Да, это я знатно пошутил. :D

Период автоповтора коротких нажатий составляет 1 сек. Длинных - 3 сек. Неудачная длительность. Тут можно предложить 2 решения.

Решение №1.
Короткие нажатия проверяйте только тогда, когда кнопка не нажата. Длинные нажатия проверяйте всегда. Тогда для длинных нажатий будет автоповтор. Если было хотя бы одно длинное нажатие, то при отпускании кнопки нужно сбросить флаг короткого нажатия. Для коротких нажатий кнопку придется нажимать и отпускать.

Решение №2.
Можно забить на автоповторы нажатий и сделать драйвер самому. Ловите изменения статуса кнопки. Когда кнопка становится нажатой, запускайте таймер и ждите либо отпускания кнопки, либо превышения интервала ожидания длинного нажатия. Если второе, то генерируйте автоповтор и перезапускайте таймер. Если первое, то вы получите короткое нажатие. Только придется исключить короткие нажатия после длительных.
Если было длинное нажатие, то коротких
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

Пред.

Вернуться в Программно - аппаратный базис ВВС

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

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

cron