Прокрутку в центре экрана, пробовал, по реализации намного проще. По времени выполнения кошмар, прорисовка всего экрана. Поэтому самая трудная для меня функция была void menu_make_screen(Menu_Item_t* const Menu, TSettingfontDot *sF) где строится все меню. Немного переписал "объяснение", больше для себя, боюсь сам забуду
спасибо! Продолжаю разбираться. Пока дело не очень быстро движется
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Разжевано для тех, кто владеет программированием. Я запустил тот код применительно к моему индикатору, но обращение к пункту меню путём прокрутки мне показалось неудобным. О чём я выше уже говорил и приводил данную ссылку. PS. У меня пока разбор с меню застопорился из-за нехватки времени. Так что я пока никуда не продвинулся
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Собрал эту демку в студии для меги8. Все собирается вообще без проблем. Гдето косяки у вас при переносе этой библиотеки в свой проект. Смотрите еще раз внимательней
У меня тоже собралось без ошибок и варнингов. Хотел сделать модель в протеусе на LCD 1602 и Atmega8. Только ни как не могу догнать - как их сюда привязать! В исходниках нет ни библиотеки для дисплея ни упоминания о контроллере. Можете помочь?
с enum ButtonValues вроде понятно, это список переменных объявили. А вот enum ButtonValues GetButtonPress меня озадачивает. Ее надо вызывать после определения нажатой кнопки и передать ей значение нажатой кнопки?
Ее надо вызывать после определения нажатой кнопки и передать ей значение нажатой кнопки?
надо эту функцию реализовать самостоятельно так, чтобы она возвращала одно из значений ButtonValues в зависимости от того, какая именно кнопка нажата. сейчас это просто заглушка, чтобы проект собирался.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
надо эту функцию реализовать самостоятельно так, чтобы она возвращала одно из значений ButtonValues в зависимости от того, какая именно кнопка нажата. сейчас это просто заглушка, чтобы проект собирался.
а, т.е. именно в ней должен быть обработчик нажатой кнопки? Спасибо вам большое.
я обработал нажатие кнопки, получил код кнопки и вызвал эту функцию, в качестве параметра передав код кнопки? но ведь функция пустая, она же не производит никаких действий над данными? Или я не правильно тут понимаю? Вот у меня в этом месте разрыв в понимании алгоритма получается. Как-то так? Спойлер
Это называется инкапсуляция. Проект делится на логические модули. Обработка кнопок отдельно, меню отдельно. То есть, в разных файлах. И чтобы не делать переменные глобальными, пишется эта функция, да, она просто возвращает код кнопки к примеру. Но зато, к этой функции мы можем обратиться из любого места в проекте. Грубо, примерно, как то так.
я обработал нажатие кнопки, получил код кнопки и вызвал эту функцию, в качестве параметра передав код кнопки? но ведь функция пустая, она же не производит никаких действий над данными? Или я не правильно тут понимаю?
суть вот в чем: микроменю отрисовывает структуру меню по своей логике. но логика эта построена на использовании двух функций, которые реализовать должен пользователь, то есть вы: это функция ВЫВОДА, которая отвечает за "изображение" пункта меню, и функция ВВОДА, которая отвечает за то, как пользователь воздействует на органы управления для перемещений по меню. так вот, рассматриваемая вами функция - это ВВОД. она обязана вернуть коды, которые готова принять система микроменю. как эта функуия получит эти коды - системе микроменю не важно: эти коды могут прийти по интернету, получиться из нажатий кнопок или вращения энкодера - это ВАШЕ ДЕЛО. но так или иначе выдать на выход функция должна один из наперед заданных кодов - для перемещения вперед-назад и вглубь-наверх по системе меню. получается, вы сами эту функцию вызывать не должны, вы должны её сделать и все, эта функция УЖЕ ВЫЗЫВАЕТСЯ откуда-то изнутри микроменю.
во всяком случае, я именно так понял суть, сама реализация микроменю мне не очень понравилась, и я ею не пользуюсь.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
да, я уже разобрался, что она вызывается из микроменю, а ей надо только код кнопки передать, который она уже дальше в микроменю транслирует. Спасибо еще раз.
Получается, что я неправильно понял вопрос. Ладно, по функции, которая возвращает код кнопки, я все равно правильно написал. По поводу проекта micromenu. В этом проекте показана идея. Как реализовать меню для мк. Пример структур данных меню и простенький пример реализации. Просто показывается, как эта идея работает. Нравится кому, не нравится, дело десятое и личное. Вывод информации может быть на разные дисплеи, по интерфейсу. В качестве кода кнопок могут быть символы по интерфейсам. Типа уарта и так далее.
И результате всего я при выводе на экран получаю какую-то хрень. Конкретно при нажатии кнопки UP, на экран выводится "RENT" Это даже не огрызок какого-то текста, а вообще совершенно не понятно откуда взявшийся набор символов. При этом в другом месте проекта, в другом файле, sprintf работает прекрасно и выводит то, что надо, как пример, вывод времени:
Код:
// Вывести время sprintf(string, "%02i:%02i:%02i", time[0], time[1], time[2]); lcd_gotoxy(0,0); lcd_str_out(string);
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения