Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Опрос кнопок
aftaev Дата: Ср, 21.10.2009, 22:16  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 15
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2009

Статус: Offline

Привествую Всех.
Кто как опрашивает кнопки в Протоне??? У меня стоит 3 кнопки (програмирование, плюс+ и минус-). Как их правильно опрашивать чтобы небыло задержек и дребезгов?

Функция Button что то не очень нравится, возможно неправильно пробывал. Нужно так: нажимаю на кнопку "Прог" ничего не происходит. Если нажать и подержать 2-3 сек. входим в меню. С кнопками + и - если нажали один раз добовляет/убовляет значение. Если кнопку удерживать добовляется быстрее.

У кого какие идеи?

Сообщение отредактировал aftaev - Ср, 21.10.2009, 22:16
ЯНДЕКС Дата: 21.10.2009
MasterPic Дата: Чт, 22.10.2009, 07:12  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Какой процессор, какие таймеры?
Идея такая: по прерыванию от таймера, допустим TMR0, опрашиваются состояния кнопок и ставятся соответствующие флаги. По флагу запускается второй таймер, который отсчитывает длительность нажатия. После чего выполняются определенные действия, в зависимости от потребностей. Это для одной кнопки. Используйте флаги!!!
terrarus Дата: Чт, 22.10.2009, 10:57  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2009

Статус: Offline

Не подходит. Если на порту if PORTB.0= 0 Then DelayMS 50 проскочит помеха=0, то это будет считаться нажатием кнопки, хотя ее и никто и не нажимал.
terrarus Дата: Пт, 23.10.2009, 08:41  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 17   ±
Замечания:   ±
На сайте с 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
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

После задержки целесообразно проверить еще раз состояние. Можно выбрать действие либо после нажатия, либо после отпускания кнопки.
retas Дата: Пт, 30.10.2009, 00:19  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 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 ' считаем что она действительно была нажата.
  • Страница 1 из 1
  • 1
Поиск: