Обсуждаем контроллеры компании Atmel.
Ответить

Кнопки и менюшка для AVR (Atmega8)

Вт ноя 22, 2022 18:15:56

Всем привет!
Люди подскажите как организовать менюшку для проэкта на avr/
Хотел на switch но,всё бы ничего но вот тогда у меня кнопки всегда задействованы те
которые не должны быть задействованы. ( пременная инкрементируется,декрементируется,
умножается и делится ) Короче в любой момент нажми менюха перескакивает по разделам.
Спасибо.
Последний раз редактировалось Аlex Вт ноя 22, 2022 23:23:32, всего редактировалось 1 раз.
Причина: Название темы

Re: Помогите с кодом на си для AVR (Atmega8)

Вт ноя 22, 2022 18:20:19

Менюшки делаются на связанных списках и указателях, с переназначением действий кнопок.
В принципе, можно не париться всей этой замороченной штукой, а организовать на тех же switch, просто введя дополнительную переменную, отвещающую за выбор действий кнопок.

Re: Помогите с кодом на си для AVR (Atmega8)

Вт ноя 22, 2022 18:57:09

Ну дело в том что кнопки опрашиваются у меня замороченно. Там я подключал стороннюю библиотеку,
я скачивал самодельную,там она большая. Там в ней и двойной клик и долгое нажатие вобщем всё там. А в свитче просто переменная из обработчика кнопок этой же библиотеки.

Добавлено after 55 seconds:
Хотелось бы фрагмент кода,в качестве примера.

Re: Помогите с кодом на си для AVR (Atmega8)

Ср ноя 23, 2022 03:09:59

Хотелось бы фрагмент кода,в качестве примера.

1.png
(48.52 KiB) Скачиваний: 63
:)
Кнопки подключены: Set – PD5; Up – PD6; Down – PD7.
Светодиоды 1 – PD0; 2 – PD1; 3 – PD2; 4 – PD3; 5 – PD4.

Алгоритм:
При кратковременном нажатии на кнопку Set, входим в меню, загорается светодиод 1 (путкт 1). Кратковременными нажатиями на кнопки Up или Down, перемещаемся по пунктам 1…5, о чём сигнализируют светодиоды, имитируя соответствующие пункты меню…
Повторное нажатие на кнопку Set осуществляет выход из меню - все светодиоды погашены.

Прошивка для визуальной работы:
temp.hex
(1.28 KiB) Скачиваний: 38

МК тактируется на заводских установках (1 МГц).

Re: Помогите с кодом на си для AVR (Atmega8)

Ср ноя 23, 2022 15:26:50

...

Поподробнее, плиз. Мне интересно.

Для ТС. Ищи MicroMenu. Их два варианта. Исходных. Есть на easyelectronics.ru вариант.
Последний раз редактировалось Demiurg Ср ноя 23, 2022 18:14:56, всего редактировалось 1 раз.

Re: Кнопки и менюшка для AVR (Atmega8)

Ср ноя 23, 2022 15:53:08

Думал недавно над реализацией многоуровневого меню, на коленке накидал не очень красиво, но в принципе работает.
В продакшн такой код пускать нельзя, но как proof of concept вполне.
Код сюда кидать не буду ВОТ ссылка на onlinegdb.

Re: Кнопки и менюшка для AVR (Atmega8)

Ср ноя 23, 2022 17:01:37

Одноуровневую менюшку достаточно просто сделать, я вот так делал. А вот в случае многоуровневой нужно будет придумать структуру, описывающую пункт меню, как-то так:
Код:
typedef struct _mitem{
  int (*function)();
  struct _mitem *submenu;
  struct _mitem *parent;
} menu_item;

Если function == NULL, то submenu указывает на менюшку следующего уровня, иначе при активации этого пункта выполняется function. Если parent != NULL, то при, скажем, нажатии "влево" (либо можно автоматом первым пунктом любой менюшки писать "Up", если parent!=NULL) вызывается родительское меню.

Re: Кнопки и менюшка для AVR (Atmega8)

Ср ноя 23, 2022 19:34:06

ну, я как бы тоже к этой теме руку приложил: viewtopic.php?f=57&t=170472&hilit=FlexMenu
Ответить