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

Re: micromenu-v2

Пт окт 26, 2018 17:38:34

Прокрутку в центре экрана, пробовал, по реализации намного проще. По времени выполнения кошмар, прорисовка всего экрана.
Поэтому самая трудная для меня функция была
void menu_make_screen(Menu_Item_t* const Menu, TSettingfontDot *sF)
где строится все меню.
Немного переписал "объяснение", больше для себя, боюсь сам забуду :))

Re: micromenu-v2

Вт окт 30, 2018 12:17:51

Добавлю картинку.
Изображение
Вложения
readme.png
(44.84 KiB) Скачиваний: 1478

Re: micromenu-v2

Вт окт 30, 2018 20:49:02

спасибо! Продолжаю разбираться. Пока дело не очень быстро движется

Re: micromenu-v2

Ср ноя 14, 2018 19:25:58

Вот здесь http://easyelectronics.ru/organizaciya- ... menyu.html это меню очень подробно разжёвано,тестировал на дисплее 128x 64...,всё работает

Re: micromenu-v2

Пт ноя 16, 2018 08:26:31

Вот здесь

Разжевано для тех, кто владеет программированием. Я запустил тот код применительно к моему индикатору, но обращение к пункту меню путём прокрутки мне показалось неудобным. О чём я выше уже говорил и приводил данную ссылку.
PS. У меня пока разбор с меню застопорился из-за нехватки времени. Так что я пока никуда не продвинулся

Re: micromenu-v2

Сб ноя 21, 2020 04:33:13

Собрал эту демку в студии для меги8. Все собирается вообще без проблем. Гдето косяки у вас при переносе этой библиотеки в свой проект. Смотрите еще раз внимательней

У меня тоже собралось без ошибок и варнингов. Хотел сделать модель в протеусе на LCD 1602 и Atmega8. Только ни как не могу догнать - как их сюда привязать! :shock: В исходниках нет ни библиотеки для дисплея ни упоминания о контроллере. Можете помочь?

Re: micromenu-v2

Вт мар 29, 2022 16:15:02

Уважаемые, а может ли кто-то пояснить, за что в micromenu v2 отвечает вот эта часть?
Код:
extern enum ButtonValues
{
   BUTTON_NONE,
   BUTTON_UP,
   BUTTON_DOWN,
   BUTTON_LEFT,
   BUTTON_RIGHT,
};

enum ButtonValues GetButtonPress(void)
{
   return BUTTON_NONE;
};

с enum ButtonValues вроде понятно, это список переменных объявили. А вот enum ButtonValues GetButtonPress меня озадачивает. Ее надо вызывать после определения нажатой кнопки и передать ей значение нажатой кнопки?

Re: micromenu-v2

Вт мар 29, 2022 20:52:57

Land писал(а):Ее надо вызывать после определения нажатой кнопки и передать ей значение нажатой кнопки?
надо эту функцию реализовать самостоятельно так, чтобы она возвращала одно из значений ButtonValues в зависимости от того, какая именно кнопка нажата. сейчас это просто заглушка, чтобы проект собирался.

Re: micromenu-v2

Вт мар 29, 2022 21:35:08

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

а, т.е. именно в ней должен быть обработчик нажатой кнопки? Спасибо вам большое.

Re: micromenu-v2

Ср мар 30, 2022 04:16:44

Нет. Обработчик кнопок отдельно. Это функция, которая возвращает из буфера обработки кнопок коды кнопок.

Re: micromenu-v2

Ср мар 30, 2022 10:53:59

я обработал нажатие кнопки, получил код кнопки и вызвал эту функцию, в качестве параметра передав код кнопки? но ведь функция пустая, она же не производит никаких действий над данными? Или я не правильно тут понимаю? Вот у меня в этом месте разрыв в понимании алгоритма получается. Как-то так?

Re: micromenu-v2

Чт мар 31, 2022 05:39:33

Это называется инкапсуляция. Проект делится на логические модули. Обработка кнопок отдельно, меню отдельно. То есть, в разных файлах. И чтобы не делать переменные глобальными, пишется эта функция, да, она просто возвращает код кнопки к примеру. Но зато, к этой функции мы можем обратиться из любого места в проекте. Грубо, примерно, как то так.

Re: micromenu-v2

Чт мар 31, 2022 08:24:50

Land писал(а):я обработал нажатие кнопки, получил код кнопки и вызвал эту функцию, в качестве параметра передав код кнопки? но ведь функция пустая, она же не производит никаких действий над данными? Или я не правильно тут понимаю?
суть вот в чем: микроменю отрисовывает структуру меню по своей логике. но логика эта построена на использовании двух функций, которые реализовать должен пользователь, то есть вы: это функция ВЫВОДА, которая отвечает за "изображение" пункта меню, и функция ВВОДА, которая отвечает за то, как пользователь воздействует на органы управления для перемещений по меню. так вот, рассматриваемая вами функция - это ВВОД. она обязана вернуть коды, которые готова принять система микроменю. как эта функуия получит эти коды - системе микроменю не важно: эти коды могут прийти по интернету, получиться из нажатий кнопок или вращения энкодера - это ВАШЕ ДЕЛО. но так или иначе выдать на выход функция должна один из наперед заданных кодов - для перемещения вперед-назад и вглубь-наверх по системе меню.
получается, вы сами эту функцию вызывать не должны, вы должны её сделать и все, эта функция УЖЕ ВЫЗЫВАЕТСЯ откуда-то изнутри микроменю.

во всяком случае, я именно так понял суть, сама реализация микроменю мне не очень понравилась, и я ею не пользуюсь.

Re: micromenu-v2

Чт мар 31, 2022 09:19:36

да, я уже разобрался, что она вызывается из микроменю, а ей надо только код кнопки передать, который она уже дальше в микроменю транслирует. Спасибо еще раз.

Re: micromenu-v2

Чт мар 31, 2022 09:22:47

Land писал(а): а ей надо только код кнопки передать
ей не надо, это она должна этот код родить!

Re: micromenu-v2

Чт мар 31, 2022 10:39:56

Хорошо, я вас понял. Главное, чтобы она вернула код кнопки.

Re: micromenu-v2

Чт мар 31, 2022 11:46:04

Как вариант заготовки (правда под адуринку)
viewtopic.php?p=4203257#p4203257
:roll:

Re: micromenu-v2

Чт мар 31, 2022 17:02:41

Получается, что я неправильно понял вопрос. Ладно, по функции, которая возвращает код кнопки, я все равно правильно написал.
По поводу проекта micromenu. В этом проекте показана идея. Как реализовать меню для мк. Пример структур данных меню и простенький пример реализации. Просто показывается, как эта идея работает. Нравится кому, не нравится, дело десятое и личное.
Вывод информации может быть на разные дисплеи, по интерфейсу. В качестве кода кнопок могут быть символы по интерфейсам. Типа уарта и так далее.

Re: micromenu-v2

Пт апр 01, 2022 12:35:16

еще раз спасибо всем откликнувшимся )

Re: micromenu-v2

Сб апр 02, 2022 09:42:05

А вот еще вопрос. Не совсем про меню, хотя как посмотреть.
не могу сделать вывод на экран по sprintf :cry:
Есть сформированный список меню:
Код:
//         NAME   NEXT(DOWN)   PREVIOS(UP)      PARENT(LEFT)   CHILD(RIGHT)   SELECT      ENTER      TEXT:
MENU_ITEM(   Menu_1,      Menu_2,      Menu_6,      NULL_MENU,   Menu_1_1,   NULL            , NULL         , "SET_DATE");
MENU_ITEM(   Menu_2,      Menu_3,      Menu_1,      NULL_MENU,   Menu_2_1,   NULL               , NULL             , "SET_TIME");
MENU_ITEM(   Menu_3,      Menu_4,      Menu_2,      NULL_MENU,   Menu_3_1,   NULL               , NULL             , "SET_OPEN");
MENU_ITEM(   Menu_4,      Menu_5,      Menu_3,      NULL_MENU,   Menu_4_1,   NULL               , NULL             , "SET_CLOSE");
MENU_ITEM(   Menu_5,      Menu_6,      Menu_4,      NULL_MENU,   Menu_5_1,   NULL               , NULL             , "SET_TEMPR");
MENU_ITEM(   Menu_6,      Menu_7,      Menu_5,      NULL_MENU,   Menu_6_1,   NULL               , NULL             , "SET_BRIGHTNES");
MENU_ITEM(     Menu_7,      Menu_1,      Menu_6,      NULL_MENU,   Menu_7_1,   NULL          , NULL             ,"SAVE&EXIT");

Есть функция, которая должна вывести на экран текст (Text) названия выбранного меню:
Код:
static void Generic_Write(const char* Text)
{
   if (Text)
      
      lcd_clear();      
      sprintf(string_M, "%s", Text);
      lcd_gotoxy(0,0);;   
      lcd_str_out(string_M);
}

само-собой переменная string_M опеределена
Код:
char string_M[14] = {0};

как и переменная Text
Код:
const char Text[];

и конечно есть определение MENU_ITEM
Код:
#define MENU_ITEM(Name, Next, Previous, Parent, Child, SelectFunc, EnterFunc, Text) \
      extern Menu_Item_t MENU_ITEM_STORAGE Next;     \
      extern Menu_Item_t MENU_ITEM_STORAGE Previous; \
      extern Menu_Item_t MENU_ITEM_STORAGE Parent;   \
      extern Menu_Item_t MENU_ITEM_STORAGE Child;  \
      Menu_Item_t MENU_ITEM_STORAGE Name = {&Next, &Previous, &Parent, &Child, SelectFunc, EnterFunc, Text}

И результате всего я при выводе на экран получаю какую-то хрень. Конкретно при нажатии кнопки UP, на экран выводится "RENT" Это даже не огрызок какого-то текста, а вообще совершенно не понятно откуда взявшийся набор символов. При этом в другом месте проекта, в другом файле, sprintf работает прекрасно и выводит то, что надо, как пример, вывод времени:
Код:
// Вывести время
   sprintf(string, "%02i:%02i:%02i", time[0], time[1], time[2]);
   lcd_gotoxy(0,0);
   lcd_str_out(string);

да, вывод смотрю в Proteus 8.10
Ответить