simark1979 0 21 января, 2020 Опубликовано 21 января, 2020 · Жалоба Всем привет) К stm32 прикрутил glcd с разрешением 128*64 и библиотеку u8g2. Теперь встал вопрос по созданию меню. Когда-то для строчного экрана писал меню сам, но получилось довольно громоздко. Поделитесь опытом, кто как делал меню, может посоветуете готовые библиотеки. Гугление особо ничего не дало, кроме ардуинных решений особо ничего не накопал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 22 января, 2020 Опубликовано 22 января, 2020 (изменено) · Жалоба menu.h Spoiler typedef const struct Menu_Item { const struct Menu_Item *Next; /**< Pointer to the next menu item of this menu item */ const struct Menu_Item *Previous; /**< Pointer to the previous menu item of this menu item */ const struct Menu_Item *Parent; /**< Pointer to the parent menu item of this menu item */ const struct Menu_Item *Child; /**< Pointer to the child menu item of this menu item */ void (*SelectCallback)(void); /**< Pointer to the optional menu-specific select callback of this menu item */ void (*EnterCallback)(void); /**< Pointer to the optional menu-specific enter callback of this menu item */ const uint32_t Options; const char Text[]; /**< Menu item text to pass to the menu display callback function */ } Menu_Item_t; #define MENU_ITEM(Name, Next, Previous, Parent, Child, SelectFunc, EnterFunc, Options, Text) \ extern Menu_Item_t Next; \ extern Menu_Item_t Previous; \ extern Menu_Item_t Parent; \ extern Menu_Item_t Child; \ Menu_Item_t Name = {&Next, &Previous, &Parent, &Child, SelectFunc, EnterFunc, Options, Text} //#define MENU_PARENT (&Menu_GetCurrentMenu()->Parent) #define MENU_PARENT (CurrentMenuItem->Parent) /** Relative navigational menu entry for \ref Menu_Navigate(), to move to the menu child. */ //#define MENU_CHILD (&Menu_GetCurrentMenu()->Child) #define MENU_CHILD (CurrentMenuItem->Child) /** Relative navigational menu entry for \ref Menu_Navigate(), to move to the next linked menu item. */ //#define MENU_NEXT (&Menu_GetCurrentMenu()->Next) #define MENU_NEXT (CurrentMenuItem->Next) /** Relative navigational menu entry for \ref Menu_Navigate(), to move to the previous linked menu item. */ //#define MENU_PREVIOUS (&Menu_GetCurrentMenu()->Previous) #define MENU_PREVIOUS (CurrentMenuItem->Previous) extern Menu_Item_t NULL_MENU; menu.c Spoiler //MAIN MENU // NAME NEXT, PREVIOUS PARENT, CHILD SELECT ENTER OPTIONS TEXT MENU_ITEM(m_auto, m_manual, m_muxbus, NULL_MENU, NULL_MENU, NULL_FUNC, Auto, DIM_ON | TIMEOUT_ON | AUTO_ID, "AUTO "); MENU_ITEM(m_manual, m_fails, m_auto, NULL_MENU, NULL_MENU, NULL_FUNC, ManualEnt, DIM_ON | TIMEOUT_ON | MANUAL_ID, "MANUAL"); MENU_ITEM(m_fails, m_maint, m_manual, NULL_MENU, NULL_MENU, NULL_FUNC, Fails, DIM_ON | TIMEOUT_ON | FAILS_ID, "FAILS "); MENU_ITEM(m_maint, m_muxbus, m_fails, NULL_MENU, NULL_MENU, NULL_FUNC, GoToChild, DIM_ON | TIMEOUT_ON | MAINT_ID, "MAINT "); MENU_ITEM(m_muxbus, m_auto, m_maint, NULL_MENU, NULL_MENU, NULL_FUNC, GoToChild, DIM_ON | TIMEOUT_ON | MUXBUS_ID, "MUXBUS"); void MENU_Navigate(Menu_Item_t* NewMenu) { if ((NewMenu == &NULL_MENU) || (NewMenu == 0)) return; CurrentMenuItem = NewMenu; if (CurrentMenuItem->Options & TIMEOUT_ON) menu_timeout = globalSysTimer; if (CurrentMenuItem->Options & SEL_ENA) select_ena = 1; else select_ena = 0; enter_idx = 0; if (CurrentMenuItem != 0 && CurrentMenuItem != &NULL_MENU) write_text((uint8_t *)(CurrentMenuItem->Text)); } void MENU_Run(uint32_t key_val) { if (key_val > 0) { key_pressed = key_val; switch(key_val) { case RIGHT_ARROW: MENU_Navigate(MENU_NEXT); break; case LEFT_ARROW: MENU_Navigate(MENU_PREVIOUS); break; case UP_ARROW: MENU_Navigate(MENU_PARENT); break; case DOWN_ARROW: MENU_Navigate(MENU_CHILD); break; case ENTER_PRE: //ENTER Function - on enter button press if (CurrentMenuItem->EnterCallback != NULL_FUNC) CurrentMenuItem->EnterCallback(); break; } } //SELECT Function runs in background if (CurrentMenuItem->SelectCallback != NULL_FUNC) { if (select_ena) { CurrentMenuItem->SelectCallback(); } } MENU_Timeout(); } оригинал тут. работает отлично. я доволен. Изменено 22 января, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба Хорошая реализация, но вот с MENU_ITEM можно пролажать. Тут прямо напрашивается кодогенератор для описания меню... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба 2 minutes ago, Eddy_Em said: Хорошая реализация, но вот с MENU_ITEM можно пролажать. Тут прямо напрашивается кодогенератор для описания меню... у меня около 70 меню в 4-х уровнях. пару часов внимательно посидеть и все оки. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
simark1979 0 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба Спасибо, сейчас буду разбираться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
simark1979 0 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба Пытаюсь разобраться с micromenu-v2, идет туго. Никакой документации. Ни у кого случайно не завалялся любой собираемый проект с меню под IAR/KEIL для любого stm32? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба На github поиском не имеете пользоваться ? https://github.com/taburyak/Control_Voltage_Battery первый в списке Хотя и разбираться особо нечего в трёх файлах https://github.com/abcminiuser/micromenu-v2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
simark1979 0 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба 10 minutes ago, x893 said: На github поиском не имеете пользоваться? Я действительно никогда не пользовался гитхабовским поиском, даже в голову не приходило.... Огромное спасибо за подсказку и ссылки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l11acmep 0 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба В 21.01.2020 в 19:57, simark1979 сказал: Всем привет) К stm32 прикрутил glcd с разрешением 128*64 и библиотеку u8g2. Теперь встал вопрос по созданию меню. Когда-то для строчного экрана писал меню сам, но получилось довольно громоздко. Поделитесь опытом, кто как делал меню, может посоветуете готовые библиотеки. Гугление особо ничего не дало, кроме ардуинных решений особо ничего не накопал. Есть библиотека emWin от Segger. которую ST под свои МК немного переделали. Называется STemWin. В интернете есть ссылка на оригинал. Попробуй. Сам пользую. Довольно удобная, хотя кое-где нужен особенный подход. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
simark1979 0 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 3 hours ago, l11acmep said: Есть библиотека emWin от Segger. которую ST под свои МК немного переделали. Называется STemWin. В интернете есть ссылка на оригинал. Попробуй. Сам пользую. Довольно удобная, хотя кое-где нужен особенный подход. ;) Спасибо, подскажите, а на маленьком монохромном экране использовали? Смотрю, либа в основном на цветных тачах используют....у меня кнопки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 4 hours ago, simark1979 said: Спасибо, подскажите, а на маленьком монохромном экране использовали? Смотрю, либа в основном на цветных тачах используют....у меня кнопки... На этом форуме было несколько тем по меню, не на одну и две страницы. В том числе обсуждение MicroMenu. А чем "маленький экран" отличается от "большого" ? используйте только те атрибуты разделов-пунктов, которые допустимы для данного экрана. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l11acmep 0 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 18 часов назад, simark1979 сказал: Спасибо, подскажите, а на маленьком монохромном экране использовали? Смотрю, либа в основном на цветных тачах используют....у меня кнопки... Сам не использовал, но внутри библиотеки огромный выбор COLOR_CONVERSION. Среди них есть и 1bpp. Это один бит на пиксель, т.е. монохром. ) Скорее всего можно. Надо смотреть по ресурсам. Если их достаточно для библиотеки, то почему бы её и не использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
simark1979 0 30 апреля, 2020 Опубликовано 30 апреля, 2020 · Жалоба Вялотекущий топик) Спасибо, я уже поставил библиотеку g8u2 и делаю меню на базе micromenu. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться