|
нажатие кнопки, в течение определенного интервала |
|
|
|
Aug 19 2010, 08:35
|
Местный
  
Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077

|
Здравствуйте,
программно необходимо читать нажата ли кнопка и если да, то как долго удерживается нажатие (есоли 3сек., то выполнить одно, если 5 сек. то другое).
Есть библиотека gpio от производителя чипа с функциями чтения/записи пина и пр. (вообще это нужно сделать под линуксом, на данном этапе это будет демон, в дальнейшем хотелось бы перенести в ядро), но я решил запостить здесь, потому как меня интересует алгоритм.
Т.е. языком псевдокода как это будет выглядеть? Очевидно, нужно проверять состояние пина, и если кнопка нажата, то запускать таймер - но возникает проблема, как отслеживать два разных тайминга - 3сек и 5 ?
Буду очень признателен за идеи и советы !
|
|
|
|
|
 |
Ответов
|
Aug 19 2010, 15:46
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Не нужно запускать/останавливать таймер. Таймер должен "тикать" всегда. Ведь интересуют-то относительные временные отсчеты, которые есть разность между временем свершения одного и другого события. А сама процедура, требуемая топикстартеру, представляет из себя конечный автомат с 4-мя состояниями. 1. Ожидаем нажатия кнопки. Если нажали кнопку - засечка времени, генерируем событие "нажали кнопку". Переход в состояние 2. 2. Следим - отпустили кнопку или нет, если нет, то сравниваем засечку времени с текущим временем, если прошло 3 секунды, генерируем событие "3 секунды" и переход в состояние 3. Если отпустили кнопку, то генерируем событие "кнопку отпустили" и переход в состояние 1. 3. Опять бдим за состоянием кнопки и временем, если кнопка о сих пор нажата и прошло 5 секунд с момента засечки, то генерируем событие "5 секунд" и переходим в состояние 4. Если отпустили кнопку, то генерируем событие "кнопку отпустили" и переход в состояние 1. 4. Далее уже просто слежение за тем когда кнопку отпустят, за временем следить не требуется. При отпускании кнопки генерируем событие "кнопку отпустили" и переход в состояние 1.
|
|
|
|
|
Sep 8 2010, 13:21
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(rezident @ Aug 19 2010, 19:46)  А сама процедура, требуемая топикстартеру, представляет из себя конечный автомат с 4-мя состояниями. К сожалению, Ваша процедура не удовлетворяет условию, поставленному автором темы (по нажатию 3 с запускать одно действие, по нажатию 5 с - другое). У Вас трёхсекундное событие генерируется ненужным "бонусом" к пятисекундному. Тут всё проще - за временем надо следить, когда кнопка уже отпущена, ибо пока она нажата - ничего о времени её нажатия предсказать невозможно. Получается конечный автомат из 2 состояний, которым можно по ходу дела давить и дребезг контактов: 1. Кнопка отпущена. Если кнопка нажата - присваивание переменной Т текущего времени, переход в состояние 2. 2. Кнопка нажата. Если кнопка отжата - вычисление разницы D текущего времени и переменной Т. При D < 500 мс игнорирование нажатия, при 5 c > D > 3 c действие для трёхсекундного нажатия, при D > 5 c действие для пятисекундного нажатия. Переход в состояние 1.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
Сообщений в этой теме
romez777 нажатие кнопки Aug 19 2010, 08:35 DpInRock А они разве разные?
Сначала - событие 3 сек. А уж ... Aug 19 2010, 08:46  rezident Цитата(Demeny @ Sep 8 2010, 19:21) К сожа... Sep 8 2010, 19:19   Demeny Цитата(rezident @ Sep 8 2010, 23:19) Ну и... Sep 9 2010, 11:49    rezident Цитата(Demeny @ Sep 9 2010, 17:49) Тогда ... Sep 9 2010, 12:20     Demeny Цитата(rezident @ Sep 9 2010, 16:20) Не н... Sep 10 2010, 06:35      rezident Цитата(Demeny @ Sep 10 2010, 12:35) Ваш к... Sep 10 2010, 12:51 Kuzmi4 2 rezident
а как же переполнения таймера ? По моем... Aug 19 2010, 15:49 rezident Цитата(Kuzmi4 @ Aug 19 2010, 21:49) а как... Aug 19 2010, 16:15  romez777 rezident, большое спасибо.
Мне сейчас подумалось,... Aug 20 2010, 04:13 777777 Цитата(romez777 @ Aug 19 2010, 12:35) про... Aug 20 2010, 09:06 sergeeff Классная программа:
Код/*************************... Aug 20 2010, 09:29 demiurg_spb Цитата(sergeeff @ Aug 20 2010, 13:29) Кла... Aug 20 2010, 10:53  sergeeff Цитата(demiurg_spb @ Aug 20 2010, 13:53) ... Aug 20 2010, 10:58   rezident Цитата(sergeeff @ Aug 20 2010, 16:58) Авт... Aug 20 2010, 11:52  777777 Цитата(demiurg_spb @ Aug 20 2010, 14:53) ... Aug 20 2010, 11:04   demiurg_spb Можно и не ждать: получил 0 - буфер пуст...
Цитат... Aug 20 2010, 11:15 sergeeff Код в студию! Aug 20 2010, 11:21 demiurg_spb Код не отдам! А если есть конкретные вопросы -... Aug 20 2010, 11:45 -JonnS- Прилагаю вариант реализации кот. почти повторяет а... Aug 22 2010, 17:53 Ivan Kuznetzov а если я хочу помимо всего вышеперечисленного отсл... Aug 25 2010, 18:14 demiurg_spb Достаточно одну кнопку удерживать в момент включен... Aug 25 2010, 18:39  Ivan Kuznetzov Цитата(demiurg_spb @ Aug 25 2010, 23:39) ... Aug 27 2010, 14:56   demiurg_spb Ну пусть сядет. При этом надо чтобы ещё в этот мом... Aug 30 2010, 10:02 rezident Цитата(Ivan Kuznetzov @ Aug 26 2010, 00:1... Aug 25 2010, 18:43  xemul Цитата(rezident @ Aug 25 2010, 22:43) ...... Aug 25 2010, 20:42   rezident Цитата(xemul @ Aug 26 2010, 02:42) Лучше ... Aug 26 2010, 08:51    xemul Цитата(rezident @ Aug 26 2010, 12:51) Луч... Aug 26 2010, 12:27     rezident Цитата(xemul @ Aug 26 2010, 18:27) Т.е. л... Aug 26 2010, 12:52      xemul Цитата(rezident @ Aug 26 2010, 16:52) Дык... Aug 26 2010, 14:21       MrYuran Цитата(xemul @ Aug 26 2010, 18:21) В прер... Sep 8 2010, 13:28 777777 Цитата(Ivan Kuznetzov @ Aug 25 2010, 22:1... Aug 26 2010, 05:18 XVR ЦитатаЗачем нужно 5с событие, которое произошло по... Sep 9 2010, 06:45 MrYuran По "отжатию" не стоит работать ещё и пот... Sep 9 2010, 12:40 ILYAUL Цитата(MrYuran @ Sep 9 2010, 16:40) По ... Sep 9 2010, 16:27  AHTOXA Цитата(ILYAUL @ Sep 9 2010, 22:27) Странн... Sep 9 2010, 17:56   ILYAUL Цитата(AHTOXA @ Sep 9 2010, 21:56) Так эт... Sep 9 2010, 21:29    MrYuran Цитата(ILYAUL @ Sep 10 2010, 01:29) Вы по... Sep 10 2010, 06:59     AHTOXA Цитата(MrYuran @ Sep 10 2010, 12:59) При ... Sep 10 2010, 08:42      MrYuran Цитата(AHTOXA @ Sep 10 2010, 12:42) Видим... Sep 10 2010, 09:00       AHTOXA Оно там не всегда обрабатывается, а только из режи... Sep 10 2010, 09:22  rezident Цитата(ILYAUL @ Sep 9 2010, 22:27) Странн... Sep 9 2010, 22:27   ILYAUL Цитата(rezident @ Sep 10 2010, 02:27) Еру... Sep 10 2010, 08:33    kolisnichenko_r Цитата(ILYAUL @ Sep 10 2010, 11:33) Я же ... Sep 14 2010, 08:33     ILYAUL Цитата(kolisnichenko_r @ Sep 14 2010, 12... Sep 14 2010, 16:37      AHTOXA Цитата(ILYAUL @ Sep 14 2010, 22:37) Юрий ... Sep 14 2010, 16:52       ILYAUL Цитата(AHTOXA @ Sep 14 2010, 20:52) Да уж... Sep 14 2010, 20:44        AHTOXA Так там про мышь, а это совсем другое дело. А про ... Sep 15 2010, 03:51         ILYAUL Цитата(AHTOXA @ Sep 15 2010, 07:51) ... А... Sep 15 2010, 05:24
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|