Опрос кнопок микроконтроллером

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Опрос кнопок микроконтроллером

Сообщение Starichok51 »

ARV, "понели" - это что и на каком языке?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Опрос кнопок микроконтроллером

Сообщение OKF »

Всё нормально. Это сленг, жаргон.)
Огонёк
Опытный кот
Сообщения: 752
Зарегистрирован: Вт авг 27, 2024 19:11:47

Re: Опрос кнопок микроконтроллером

Сообщение Огонёк »

[uquote="OKF",url="/forum/viewtopic.php?p=4665851#p4665851"]Можно и без бабах. Сделал одно, другое, третье, уснул и не проснулся. Где тут цикл?[/uquote]
Одноразовое изделие? Бывает.
Или же в цикл включен мясной человек, который, увидев, что чудо-устройство не подаёт признаков жизни, ткнёт красную кнопочку и перезапустит цикл.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Опрос кнопок микроконтроллером

Сообщение ARV »

Вы меня поражаете... Наверное, я не ошибусь, если скажу, что в известной нам части Солнечной системы Земля нет девайсов, в рабочий цикл которых не был бы включен "мясной" человек...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AlexS4
Друг Кота
Сообщения: 6646
Зарегистрирован: Пт сен 10, 2021 15:19:36
Откуда: Протвино

Re: Опрос кнопок микроконтроллером

Сообщение AlexS4 »

[uquote="ARV",url="/forum/viewtopic.php?p=4665951#p4665951"]невозможно программно заставить человека нажать на кнопку.[/uquote]
вы подвергаете сомнению целую профессиональную область, :tea:
вся индустрия интернет рекламы предполагает что таки можно :)
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Опрос кнопок микроконтроллером

Сообщение Just_Fluffy »

"Нажми на кнопку - получишь результат!
Твоя мечта осуществится!" (ц) Технология
Белая и Пушистая
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Опрос кнопок микроконтроллером

Сообщение ARV »

[uquote="AlexS4",url="/forum/viewtopic.php?p=4666739#p4666739"][uquote="ARV",url="/forum/viewtopic.php?p=4665951#p4665951"]невозможно программно заставить человека нажать на кнопку.[/uquote]
вы подвергаете сомнению целую профессиональную область, :tea:
вся индустрия интернет рекламы предполагает что таки можно :)[/uquote]
Предполагать можно всё, что угодно. Реальность доказывает, что нажимают единицы из тысяч. Процент дебилов никогда не был и не будет равен нулю...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Опрос кнопок микроконтроллером

Сообщение BOB51 »

К примеру вылезла хренова рекламна заставка, а убрать ее таки кнопкой надо (или убрать или программу закрыть)...
Вот и таки "заставили кнопку нажать".
:twisted:
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Опрос кнопок микроконтроллером

Сообщение Jack_A »

[uquote="BOB51",url="/forum/viewtopic.php?p=4667758#p4667758"]К примеру вылезла хренова рекламна заставка[/uquote] ... в микроконтроллерном устройстве? Чур меня ! :shock:
СпойлерУ нас в отдел купили новую микро-ЭВМ (так тогда называлось, это 90-е годы) . Собрали, включили. Вдруг защёлкал Consul (теперь это назвали бы принтер, а тогда - устройство вывода) и выдал: "Ышук доил Аиду". И замолк. Все выпали в осадок. Дело в том, что фамилия одного из инженеров в отделе была Ищук, а Аида - это была марка японского робота, которого пытались клонировать в соседнем КБ. :) :?
Последний раз редактировалось Jack_A Вс янв 05, 2025 11:36:12, всего редактировалось 1 раз.
Изображение
Огонёк
Опытный кот
Сообщения: 752
Зарегистрирован: Вт авг 27, 2024 19:11:47

Re: Опрос кнопок микроконтроллером

Сообщение Огонёк »

[uquote="ARV",url="/forum/viewtopic.php?p=4666198#p4666198"]Вы меня поражаете... Наверное, я не ошибусь, если скажу, что в известной нам части Солнечной системы Земля нет девайсов, в рабочий цикл которых не был бы включен "мясной" человек...[/uquote]
Извините, поражать не хотел. Ну а насчёт непременной необходимости мясных человеков для действия - https://ru.wikipedia.org/wiki/%D0%A1%D0 ... 1%80%C2%BB
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Опрос кнопок микроконтроллером

Сообщение Just_Fluffy »

Огонёк писал(а):непременной необходимости мясных человеков
Кожаных же )))
Белая и Пушистая
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Опрос кнопок микроконтроллером

Сообщение ARV »

[uquote="Огонёк",url="/forum/viewtopic.php?p=4667876#p4667876"][uquote="ARV",url="/forum/viewtopic.php?p=4666198#p4666198"]Вы меня поражаете... Наверное, я не ошибусь, если скажу, что в известной нам части Солнечной системы Земля нет девайсов, в рабочий цикл которых не был бы включен "мясной" человек...[/uquote]
Извините, поражать не хотел. Ну а насчёт непременной необходимости мясных человеков для действия - https://ru.wikipedia.org/wiki/%D0%A1%D0 ... 1%80%C2%BB[/uquote]вот еще сказок тут не хватало... Википедия и без того тот еще источник, так ещё и каждое второе слово "предположительно" :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Опрос кнопок микроконтроллером

Сообщение OKF »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4667901#p4667901"]Кожаных же )))[/uquote]
"...хотел пробить сильно и точно, да неудачно лёг на ногу его кожаный дружок". Футбол, вспомнилось.))
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Опрос кнопок микроконтроллером

Сообщение Just_Fluffy »

OKF, ну мне больше вспомнилась озвучка от лица роботов из бостон дайнемикс - "...кожаные ублюдки..."
Белая и Пушистая
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Опрос кнопок микроконтроллером

Сообщение OKF »

Теперь по теме.)

Код: Выделить всё

// Кнопки без дребезга
uint8_t keyTick() {
  static uint8_t timer;
  static uint8_t old;
  static uint8_t valid;

  uint8_t key = get_key();
  if (old != key) {                     //change
    old = key;
    timer = DEBOUNCE_TIME;
  }
  else if (timer && !--timer && valid != key)
    valid = key;
  return valid;
}
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Опрос кнопок микроконтроллером

Сообщение Just_Fluffy »

OKF, т.е. для каждой кнопки в памяти надо держать три байтовых переменных? И тогда для каждой кнопки нужно в keyTick передавать указатель на эти три байта плюс физическое состояние кнопки...
Тогда мой вариант с "гистерезисным" счетчиком экономичнее - один байт на кнопку.
Тут ранее упоминался т.н. вертикальный счетчик - хорош, когда 8 кнопок легко мапятся в один байт. Тогда 3 байта хватает для 8 кнопок.
Белая и Пушистая
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Опрос кнопок микроконтроллером

Сообщение BOB51 »

Всё зависит от того, какой функционал той кнопке в программе задавать нужно.
Служебных флагов и прочего может быть и побольше.
8)
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Опрос кнопок микроконтроллером

Сообщение Adrift »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4668178#p4668178"]т.е. для каждой кнопки в памяти надо держать три байтовых переменных?[/uquote]
Если get_key() возвращает состояние 8-ми кнопок, то и работать будет для 8-ми кнопок.
Just_Fluffy писал(а):Тогда мой вариант с "гистерезисным" счетчиком экономичнее - один байт на кнопку.
Тут ранее упоминался т.н. вертикальный счетчик - хорош, когда 8 кнопок легко мапятся в один байт. Тогда 3 байта хватает для 8 кнопок.
С удовольствием послушаю как при помощи 2-х или 3-х битного вертикального счетчика считающего строго до 4-х или 8-ми задать пороговое значение в 30ms для короткого нажатия, 150ms для автоповтора и 700ms для длинного нажатия )
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Опрос кнопок микроконтроллером

Сообщение Just_Fluffy »

Adrift писал(а):Если get_key() возвращает состояние 8-ми кнопок, то и работать будет для 8-ми кнопок.
там как минимум timer должен быть индивидуален для каждой кнопки. И длинное/короткое нажатие в коде OKF тоже не предусмотрено, так что не передергивайте.
Adrift писал(а):С удовольствием послушаю как при помощи 2-х или 3-х битного вертикального счетчика считающего строго до 4-х или 8-ми задать пороговое значение в 30ms для короткого нажатия, 150ms для автоповтора и 700ms для длинного нажатия )
Опять же, вырвано из контекста.
Я всего лишь говорила про экономию памяти. А как автоповтор будет реализовывать автор вертикальных счетчиков - вопрос алгоритма)))

А вообще - все зависит от алгоритма. Мне хватает 2 байт на кнопку на короткое/длинное нажатие/автоповтор/пауза перед автоповтором.
Белая и Пушистая
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Опрос кнопок микроконтроллером

Сообщение ARV »

Итак, дребезг гасим тем, что опрос ведем периодически с периодом дольше дребезга, допустим, 30 мс.
get_key возвращает результат опроса сразу 8 кнопок

Далее, делаем функцию get_event, которая берет get_key и при помощи единственного счетчика отслеживает: нажатие, отпускание и промежуток между ними.

Таким образом, имеем минимум накладных расходов и работаем с событиями: ИЗМЕНИЛОСЬ_СОСТОЯНИЕ_КНОПОК и СОСТОЯНИЕ_НЕ_МЕНЯЕТСЯ_ДОЛГО.
То есть отслеживаем и долгое удержание кнопки, и короткое.

Раз и навсегда такое написали, и горя больше не знаем. Опрос можно повесить на любой таймер, который всё равно наверняка будет в любом проекте. И тему можно закрывать :)))

Добавлено after 7 minutes 47 seconds:
Дополнение: get_key может возвращать до 255 кнопок, но в этом случае комбинации одновременно нажатых кнопок могут быть недоступны.

Я больше вариантов навешиваю на get_event, формируя там из комбинаций готовые события. Тогда в разных проектах почти всё одинаково делается, только события могут быть разные. И туда, кстати, очень хорошо вписываются события от энкодера, команды из USART, прерываний и т.п., вся обработка однотипная выходит
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «Периферия»