Опрос кнопок
|
|
aftaev |
Дата: Ср, 21.10.2009, 22:16 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
15
Замечания:
±
На сайте с 11.10.2009
Статус:
Offline
|
Привествую Всех. Кто как опрашивает кнопки в Протоне??? У меня стоит 3 кнопки (програмирование, плюс+ и минус-). Как их правильно опрашивать чтобы небыло задержек и дребезгов? Функция Button что то не очень нравится, возможно неправильно пробывал. Нужно так: нажимаю на кнопку "Прог" ничего не происходит. Если нажать и подержать 2-3 сек. входим в меню. С кнопками + и - если нажали один раз добовляет/убовляет значение. Если кнопку удерживать добовляется быстрее. У кого какие идеи?
Сообщение отредактировал
aftaev - Ср, 21.10.2009, 22:16
|
|
|
|
MasterPic |
Дата: Чт, 22.10.2009, 07:12 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Какой процессор, какие таймеры? Идея такая: по прерыванию от таймера, допустим TMR0, опрашиваются состояния кнопок и ставятся соответствующие флаги. По флагу запускается второй таймер, который отсчитывает длительность нажатия. После чего выполняются определенные действия, в зависимости от потребностей. Это для одной кнопки. Используйте флаги!!!
|
|
|
|
terrarus |
Дата: Чт, 22.10.2009, 10:57 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 21.08.2008
Статус:
Offline
|
Symbol SBProg = PORTB.0 Symbol SbPlus = PORTB.1 Symbol SbMiunes = PORTB.2 if SBProg = 0 Then DelayMS 50: Gosub Metka1 If SbPlus = 0 Then DelayMS 50: Nupr = Nupr + 1 If SbMiunes = 0 Then DelayMS 50: Nupr = Nupr - 1 Или так if PORTB.0= 0 Then DelayMS 50: Gosub Metka1 If PORTB.1= 0 Then DelayMS 50: Nupr = Nupr + 1 If PORTB.2= 0 Then DelayMS 50: Nupr = Nupr - 1
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
|
|
|
|
aftaev |
Дата: Чт, 22.10.2009, 18:40 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
15
Замечания:
±
На сайте с 11.10.2009
Статус:
Offline
|
Не подходит. Если на порту if PORTB.0= 0 Then DelayMS 50 проскочит помеха=0, то это будет считаться нажатием кнопки, хотя ее и никто и не нажимал.
|
|
|
|
terrarus |
Дата: Пт, 23.10.2009, 08:41 | Сообщение # 5 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 21.08.2008
Статус:
Offline
|
aftaev, слушайте, какая помеха, какие ложные срабатывания на "0'', что за устройство, что вы вообще хотите получить? Везде на всех форумах действует принцип "КАКОВ ВОПРОС, ТАКОВ И ОТВЕТ". Хотите чтобы Вам дали полный, компетентный и удовлетворяющий Вас ответ, ФОРМУЛИРУЙТЕ КОРРЕКТНО И ПОЛНО Ваш вопрос, так чтобы Вас понимали. Здесь же вы задали вопрос: Quote (aftaev) Кто как опрашивает кнопки в Протоне??? У меня стоит 3 кнопки (програмирование, плюс+ и минус-). Как их правильно опрашивать чтобы небыло задержек и дребезгов? Я Вам посоветовал как. Лично я так делаю. В коде if PORTB.0= 0 Then DelayMS 50 после ТHEN работает пауза в 50 милисекунд, которая является антидребезговой защитой, в течении этого времени ничего не проскочит ни 0 ни единица. Если есть какие-то ограничения в алгоритме работы вашего устройства, нужно было подробно описать их тоже.
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
|
|
|
|
ADMIN |
Дата: Пт, 23.10.2009, 14:25 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
После задержки целесообразно проверить еще раз состояние. Можно выбрать действие либо после нажатия, либо после отпускания кнопки.
|
|
|
|
retas |
Дата: Пт, 30.10.2009, 00:19 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Я с кнопками делаю так (считаю что нажатие кнопки длится не менее 0,2сек): count1 - счетчик1 count2 - счетчик2 . lop1: . if PORTB.0= 0 Then INC count1: DelayMS 20 . if PORTB.0= 0 Then INC count2 . if count1<10 then goto lop1 ' Eсли 7 раз из 10 обнаружили кнопку нажатой, . if count2>=7 then knopka nazata ' считаем что она действительно была нажата.
|
|
|
|