Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2020, 15:38

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 17:56 
Только пришел

Зарегистрирован: 06 авг 2019, 11:28
Сообщения: 18
Добрый день.
Вопрос как сохранить значение переменной при вводе ее с кнопок. На данный момент есть два меню- 1-е выводит информацию о названии параметра и его величину

case MENU_TIME_DELAY_SF: {
if(button == L_ENTER && sens_sf != val)
{ //если нажата кнопка L_ENTER
sens_sf = val;
}

uint8_t Max_Temprecher=99;
max_val = Max_Temprecher;
T_set=val;
MEMORY_buffer.Parameter1=T_set;
FLASH_WriteSettings();

snprintf((char*)DisplayBuf2, STRING_WIDTH, " %3u ", val + 1); //выводит на экран занчение val + 1 численное значение задержки
WriteDisplay((uint8_t*)TIME_DELAY_SF_STR, DisplayBuf2); //записываем в дисплей и выводим сначала текст TIME_DELAY_SF_STR, затем DisplayBuf2
val=0;
}
break;




, при нажатии на кнопку заходим во второе меню-где задается кнопкой новое значение переменной.


case MENU_TIME_DELAY_SF_VAL: {
if(change) {
val = sens_sf; //выходим
} else {
val = GetNewValue(button, val, max_val); //здесь val принимает значение
}
snprintf((char*)DisplayBuf2, STRING_WIDTH, " >%3u<", val + 1); //отображаем даннык val + 1
WriteDisplay((uint8_t*)TIME_DELAY_SF_STR, DisplayBuf2); //выводим на экран
} break;



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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 18:14 
Только пришел

Зарегистрирован: 06 авг 2019, 11:28
Сообщения: 18
Прописали обращение к памяти и запись в нее FLASH_ReadSettings(); FLASH_WriteSettings(); значение записывается. Но из-за val похоже оно обнуляется, и при повторном входе в меню1 уже не отображается. val привязано к нажатию кнопки в других меню. Похоже нужно как то отвязать значение переменной от val.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 18:29 
Только пришел

Зарегистрирован: 06 авг 2019, 11:28
Сообщения: 18
может второе меню представить так
case MENU_TIME_DELAY_SF_VAL: { //Уставка Т_котла
if(change) {
val = sens_sf; //выходим
} else {
uint8_t val_sens=val;
val = GetNewValue(button, val, max_val);

if (val_sens!=val)
uint8_t val_sens_parametr=1;
uint8_t val_sens_parametr++;
FLASH_ReadSettings();
T_set=MEMORY_buffer.Parameter1; //выводим значение из памяти
uint8_t val_Temptrcher=T_set+val_sens_parametr;

//здесь val принимает значение
}
snprintf((char*)DisplayBuf2, STRING_WIDTH, " >%3u<", val_Temptrcher + 1); //отображаем даннык val + 1
WriteDisplay((uint8_t*)TIME_DELAY_SF_STR, DisplayBuf2); //выводим на экран
} break;

т.е мы выводим значение уже из памяти и прибавляем 1 если у нас произошло 1 нажатие на кнопку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 20:26 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2062
Какая жуть !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 20:54 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Что такое массивы функций - не узнавали? Погуглите по сишным учебникам. Создаете функции, описывающие каждый пункт меню - что отображается на дисплее, что там рисуется, что выполняется. Объявляете массив этих функций - он представляет собой ссылки на функции. Далее, в той части, в которой вы разбираете, какая кнопка нажата - после определения нажатой кнопки просто вызываете функцию из массива функций. Вот вам и работа менюшки.

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

Цитата:
как сохранить значение переменной при вводе ее с кнопок.

В общем случае - использовать глобальную переменную вместо локальной. Ну или статическую, определенную в функции, но со словом static


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 07 ноя 2019, 22:07 
Только пришел

Зарегистрирован: 06 авг 2019, 11:28
Сообщения: 18
за основу взял древовидное ветвление, весьма отдалено похожее на это http://easyelectronics.ru/organizaciya- ... menyu.html
построено на case. Если можно лучше, буду рад примеру (если скинете - заранее спасибо. )
Вопрос заключается как реализовать вывод из памяти и запись в память при навигации по меню - сейчас val перетирает память на 0 и после выхода из меню записанное значение стирается на 0. Идея ввести дополнительную переменную (последние два фрагмента выше).
PS: По глобальным переменным согласен, просто поторопился - отредактировал на глобальные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 11 ноя 2019, 15:19 
Старожил

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 243
noob_style писал(а):
за основу взял древовидное ветвление, весьма отдалено похожее на это http://easyelectronics.ru/organizaciya- ... menyu.html
построено на case. Если можно лучше, буду рад примеру (если скинете - заранее спасибо. )
Вопрос заключается как реализовать вывод из памяти и запись в память при навигации по меню - сейчас val перетирает память на 0 и после выхода из меню записанное значение стирается на 0. Идея ввести дополнительную переменную (последние два фрагмента выше).
PS: По глобальным переменным согласен, просто поторопился - отредактировал на глобальные.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Алгоритм вывода данных из памяти на дисплей
СообщениеДобавлено: 18 янв 2020, 11:32 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3685
Откуда: Новосибирск
jenya77 писал(а):
а именно тот вариант который вы привели в ссылке - работает отлично, я лично создал меню по образу и подобию и очень доволен.

Плюсую. Тоже использую меню по этому способу. Но, я взял за основу исходный проект, а названия с проекта по ссылке. Переделал на свой лад.
Этот подход хорош тем, что использует состояния. А у меню, как ни крути - состояния.
Советы ТС. Нужно садиться и составлять подробное ТЗ, что требуется, как реализовать. Если требуются дополнительные буферы, значит использовать их. И не забывать делать переменные static или глобальными. Но, лучше использовать инкапсуляцию. У каждого программного модуля свои static переменные.
Show


Show Мой вариант меню


Это из одного моего проекта. Донором этого проекта послужил Термодат
Вложение:
termodat12K6B_1.jpg
termodat12K6B_1.jpg [ 21.61 Кб | Просмотров: 389 ]


Show Скелет-заготовка этого проекта


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB