Страница 19 из 26

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

Добавлено: Пн дек 30, 2024 10:49:48
Starichok51
ARV, "понели" - это что и на каком языке?

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

Добавлено: Пн дек 30, 2024 11:07:06
OKF
Всё нормально. Это сленг, жаргон.)

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

Добавлено: Пн дек 30, 2024 17:09:22
Огонёк
[uquote="OKF",url="/forum/viewtopic.php?p=4665851#p4665851"]Можно и без бабах. Сделал одно, другое, третье, уснул и не проснулся. Где тут цикл?[/uquote]
Одноразовое изделие? Бывает.
Или же в цикл включен мясной человек, который, увидев, что чудо-устройство не подаёт признаков жизни, ткнёт красную кнопочку и перезапустит цикл.

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

Добавлено: Пн дек 30, 2024 21:40:34
ARV
Вы меня поражаете... Наверное, я не ошибусь, если скажу, что в известной нам части Солнечной системы Земля нет девайсов, в рабочий цикл которых не был бы включен "мясной" человек...

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

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

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

Добавлено: Ср янв 01, 2025 13:58:31
Just_Fluffy
"Нажми на кнопку - получишь результат!
Твоя мечта осуществится!" (ц) Технология

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

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

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

Добавлено: Сб янв 04, 2025 18:38:17
BOB51
К примеру вылезла хренова рекламна заставка, а убрать ее таки кнопкой надо (или убрать или программу закрыть)...
Вот и таки "заставили кнопку нажать".
:twisted:

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

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

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

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

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

Добавлено: Вс янв 05, 2025 01:31:29
Just_Fluffy
Огонёк писал(а):непременной необходимости мясных человеков
Кожаных же )))

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

Добавлено: Вс янв 05, 2025 13:08:24
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]вот еще сказок тут не хватало... Википедия и без того тот еще источник, так ещё и каждое второе слово "предположительно" :)))

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

Добавлено: Вс янв 05, 2025 14:45:46
OKF
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4667901#p4667901"]Кожаных же )))[/uquote]
"...хотел пробить сильно и точно, да неудачно лёг на ногу его кожаный дружок". Футбол, вспомнилось.))

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

Добавлено: Вс янв 05, 2025 17:00:55
Just_Fluffy
OKF, ну мне больше вспомнилась озвучка от лица роботов из бостон дайнемикс - "...кожаные ублюдки..."

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

Добавлено: Вс янв 05, 2025 18:08:37
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;
}

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

Добавлено: Вс янв 05, 2025 20:44:27
Just_Fluffy
OKF, т.е. для каждой кнопки в памяти надо держать три байтовых переменных? И тогда для каждой кнопки нужно в keyTick передавать указатель на эти три байта плюс физическое состояние кнопки...
Тогда мой вариант с "гистерезисным" счетчиком экономичнее - один байт на кнопку.
Тут ранее упоминался т.н. вертикальный счетчик - хорош, когда 8 кнопок легко мапятся в один байт. Тогда 3 байта хватает для 8 кнопок.

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

Добавлено: Вс янв 05, 2025 21:56:26
BOB51
Всё зависит от того, какой функционал той кнопке в программе задавать нужно.
Служебных флагов и прочего может быть и побольше.
8)

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

Добавлено: Пн янв 06, 2025 00:13:26
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 для длинного нажатия )

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

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

А вообще - все зависит от алгоритма. Мне хватает 2 байт на кнопку на короткое/длинное нажатие/автоповтор/пауза перед автоповтором.

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

Добавлено: Пн янв 06, 2025 11:41:31
ARV
Итак, дребезг гасим тем, что опрос ведем периодически с периодом дольше дребезга, допустим, 30 мс.
get_key возвращает результат опроса сразу 8 кнопок

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

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

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

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

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