Не работает блок меню

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Не работает блок меню

#21

Сообщение Слимпер » 20.10.2016{, 17:18}

Слимпер писал(а):Есть уставка =10 при помощи кнопок + - (шаг 1 ) надо изменить число на 25. Вопрос сколько команд запись будет сделано 1 или 15?
Протестировал, получается, что функция EEPROMWriteInt, вызывается после каждого нажатия на кнопку + или  -. Не только, но и при методе с ускорением тоже на каждый шаг происходит запись числа в память.

support, мне кажется это не правильный метод. Так при изменении уставов в больших приделах весь ресурс памяти может закончиться быстро.

Добавлено (20.10.2016, 17:18)
---------------------------------------------
Я в своих проектах делал или отдельную кнопку сохранить (отменить изменение) или делал запись переменой в память по выходу из пункта меню.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Не работает блок меню

#22

Сообщение support » 20.10.2016{, 17:27}

Слимпер писал(а):support, мне кажется это не правильный метод. Так при изменении уставов в больших приделах весь ресурс памяти может закончиться быстро.
Я рассматривал этот вопрос при создании блока. Вариант с отслеживанием конца редактирования тянет за собой как минимум увеличение кода, так и  и удвоение переменных. Веди для того что бы при выходе из меню определить необходимость записи в память, необходимо старое значение где то сохранить.  Ну или сравнивать с записанным в EEPROM. Это опять таки лишний и достаточно большой код. Поэтому я пошол таким путём, какой сейчас реализован. Ведь для чего в основном применяется меню (в особенности пункты с сохранением в EEProm)? Для хранения уставок и параметров. Они изменяются не очень часто. Не думаю что при реальной эксплуатации они будут изменяться  100 000 раз. Даже с учетеом ускоренного изменения. Вот например изменить с 10 до 25.  Запись произойдёт 15 раз. Для того что бы израсходовать ресурс данной ячейки это значение надо будет изменить 6666 раз (с 10 до 25 и обратно). Если менять именно эту уставку по два раза за день то это будет 3333 дня или 9 лет. Я думаю что по два раза на день уставку руками никто терзать не будет (каждый день без выходных и проходных))) ). Поэтому я думаю такой подход приемлем.
Автор программы FLProg.

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Не работает блок меню

#23

Сообщение nalnik » 20.10.2016{, 17:30}

Слимпер
В каком диапазоне Вы меняете уставки?
Если от 0 до 100 - каждый час - так и да, нужна кнопка "записать"
Запись по выходу из МЕНЮ - ерунда и делать не надо - Пример: Вы вошли в меню, нашли 8 пункт (к примеру) - изменили -- а результат Вам будит виден только после выхода из меню - и с нова заходите меню, ищите этот 8 пункт и меняете и выходите и так по кругу.
Нужна просто кнопка SET - Так и она там есть - тока надо подумать.
Последний раз редактировалось nalnik 20.10.2016{, 17:38}, всего редактировалось 1 раз.
Я хочу быть добрее, но люди сами нарываются.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Не работает блок меню

#24

Сообщение Слимпер » 20.10.2016{, 17:41}

support писал(а):Я рассматривал этот вопрос при создании блока. Вариант с отслеживанием конца редактирования тянет за собой как минимум увеличение кода, так и  и удвоение переменных.
Почему обязательно так много переменных.

Возможно так.
При входе в пункт меню происходит копирование содержимого во временную переменную.
Значение этой переменной изменяется кнопками и выводится на экран.
По выходу из пункта меню (перехода на следующий), проверяется значение в EEPROM и если оно отличается от значения во временной переменной то записываем в память. 

Так надо всего по одной переменной каждого типа. Да и код не сильно вырастить.

Но это чисто мое мнение.

Добавлено (20.10.2016, 17:39)
---------------------------------------------
nalnik писал(а):Если от 0 до 100 - так и да, нужна кнопка "записать"
Ну например, уставка температуры во Float  от 10 до 30 градусов с точностью 0.1 получается уже 200 шагов.

Добавлено (20.10.2016, 17:41)
---------------------------------------------
Слимпер писал(а):По выходу из пункта меню (перехода на следующий), проверяется значение в EEPROM и если оно отличается от значения во временной переменной то записываем в память.
 Если вместо  write() использовать update(), то и код проверка не требуется.
Последний раз редактировалось Слимпер 20.10.2016{, 17:40}, всего редактировалось 1 раз.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Не работает блок меню

#25

Сообщение support » 20.10.2016{, 17:42}

Я думал над вариантом с отдельной кнопкой - "Применить изменённое значение". Но это опять во первых дополнительный код  и переменные (что в разрезе ардуинки критично). Ведь где-то надо хранить редактируемое значение. Ну и соответственно ещё один вход самой ардуинки для кнопки. Обычный сценарий для меню - это установка настроечных данных для конкретного экземпляра изделия. Они обычно меняются один - два раза за время жизни устройства. Ну или например уставка температуры. Меняется в среднем пару раз в сезон. Если это где то в тех процессе, то один раз ставятся уставки для разных режимов, и просто переключаются между ними, но сами уставки меняются редко. Я пока не вижу юзеркеёса где часто надо будет менять уставки на большую величину с помощью кнопок + и -.  Рука кнопку держать устанет))))))
Автор программы FLProg.

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Не работает блок меню

#26

Сообщение nalnik » 20.10.2016{, 17:44}

support
Спасибо Вам.
А Я хочу аленький цветочек. - Шутка.

Хорошо если бы в епром при первом пуске и выборе Мин/Макс в МЕНЮ записывалось значение в диапазоне Мин/Макс , а то бывает что записывается 168888 подобное значение при заданных 10/40
Последний раз редактировалось nalnik 20.10.2016{, 18:11}, всего редактировалось 1 раз.
Я хочу быть добрее, но люди сами нарываются.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Не работает блок меню

#27

Сообщение Слимпер » 20.10.2016{, 17:52}

support, ну меня просто смутил такой подход, как уже писал выше. Можно сделать не сильно увеличивая код (как мне кажется).

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

Ладно, еще раз я не настаиваю, просто высказал мнение и предложил варианты.
Могу выложить свой проект, там для меню таких блоков наворотил, самому жуть.
Последний раз редактировалось Слимпер 20.10.2016{, 17:53}, всего редактировалось 1 раз.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Не работает блок меню

#28

Сообщение support » 20.10.2016{, 17:59}

Но вообще над меню я ещё подумаю. Есть идеи насчёт оптимизации. Это не будет касаться блоков в программе FLProg, а коснётся только компиляции в С. Хочу поиграться с классами (пора уже на ООП переходить) а не работать с записями как сейчас. Возможно код получится красивей и аккуратнее. Всё таки первая реализация, возможно не оптимальная. Да и баги половить надо. Они ещё есть.
Автор программы FLProg.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Не работает блок меню

#29

Сообщение Слимпер » 20.10.2016{, 18:07}

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

Это пожелание.  

Вот кстати проект, про который писал выше, там все меню на FBD сделано. 
Тяжёлый и громоздкий, но дачный сезон отработал, там еще 6 контролеров в составе, но меню тут реализовано.
Вложения
8316458.rar
(1.35 МБ) 80 скачиваний

Sergik
Рядовой
Сообщения: 5
Зарегистрирован: 15.06.2016{, 15:59}
Репутация: 0

Не работает блок меню

#30

Сообщение Sergik » 20.10.2016{, 18:51}

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

Добавлено (20.10.2016, 18:51)
---------------------------------------------
Dev1, Странно почему у меня не получается. Может проблема в операционной системе? Если Вам не сложно, попробуйте скомпилировать мой проект, с выбранной переменной float
P.S. использую windows7
Вложения
My_menu.flp
(840.51 КБ) 77 скачиваний
5300113.jpg
Последний раз редактировалось Sergik 20.10.2016{, 18:52}, всего редактировалось 1 раз.

Аватара пользователя
Dev1
Майор
Сообщения: 1026
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 59
Откуда: Гондурас

Не работает блок меню

#31

Сообщение Dev1 » 20.10.2016{, 19:44}

Sergik писал(а):Dev1, Странно почему у меня не получается. Может проблема в операционной системе? Если Вам не сложно, попробуйте скомпилировать мой проект, с выбранной переменной floatP.S. использую windows7
Прикрепления: 5300113.jpg(138Kb) · My_menu.flp(841Kb)
Выставил везде Float, компилируется. У меня стоит апдейт от 19.10.2016 UpdateFlprog_2-0_to_2-1.zip
Вложения
6790564.jpg
7865961.jpg
Win10-64 FLProg v7.5.2 Portable :fie:

Sergik
Рядовой
Сообщения: 5
Зарегистрирован: 15.06.2016{, 15:59}
Репутация: 0

Не работает блок меню

#32

Сообщение Sergik » 20.10.2016{, 21:08}

Dev1, спасибо что проверили, попробовал переустановить программу, выполнить  UpdateFlprog_2-0_to_2-1, но результат тот-же.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Не работает блок меню

#33

Сообщение kalobyte » 22.10.2016{, 14:35}

хотел бы вернуться к вопросу об ошибке
pr1.ino: In function 'void _menuSaveToEEPROMItem(byte)':
pr1.ino:636:92: error: 'EEPROMWriteBoolean' was not declared in this scope

Using library Wire in folder: C:\Users\admin\AppData\Roaming\Arduino15\packages\arduino\hardware\avr\1.6.5\libraries\Wire
Using library LiquidCrystal_I2C in folder: d:\Program files\flprog\ide\libraries\LiquidCrystal_I2C (legacy)
Using library EEPROM in folder: C:\Users\admin\AppData\Roaming\Arduino15\packages\arduino\hardware\avr\1.6.5\libraries\EEPROM

у меня установлена другая иде ардуины 1.6.5 и почему-то ардуина из флпрог
видит библиотеку EEPROM из другого пути, а и2ц видит свою

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Не работает блок меню

#34

Сообщение Слимпер » 23.10.2016{, 15:29}

support, Еще момент сейчас ускорение подразумевает авто изменение значение при удержание кнопки, двойное ускорение уменьшает период авто нарастания значения.
Но мне кажется удобнее (для себя так делаю):
Одиночное нажатие -один шаг
Удержание первые 10 шагов - авто изменение значение с шагом 1
Длинное удерержание после 10 шагов -  авто изменение значение с шагом 10
Дальше с  шагом 100, затем 1000.

Так же делал авто коррекцию если значение исходно вне диапазона (мин макс) 

Это я так привел, как идеи если будете переделывать блок.

Аватара пользователя
shvromyou
Рядовой
Сообщения: 44
Зарегистрирован: 28.03.2016{, 12:28}
Репутация: 3
Имя: Роман

Не работает блок меню

#35

Сообщение shvromyou » 24.10.2016{, 03:10}

Sergik писал(а):Обнаружил проблему компиляции при выборе в основном блоке меню переменной типа floatpr11.ino: In function 'void _menuSaveToEEPROMItem(byte)':

pr11.ino:643:80: error: 'EEPROMWriteFloat' was not declared in this scope

Если поставить галочку в пункте сохранить в EEPROM ошибка пропадает!
С переменной типа integer все работает без проблем.
У меня тоже так.

V0van1
Рядовой
Сообщения: 1
Зарегистрирован: 26.10.2016{, 17:35}
Репутация: 0

Не работает блок меню

#36

Сообщение V0van1 » 26.10.2016{, 17:43}

Для тех у кого не компилируется с Float - попробуйте использовать точку, а не запятую в установке шага или значения.
У меня просьба к многоуважаемому автору программы увеличить размер блока по ширине, а то иначе при большом количестве меню получается вот такая вот штука, поправьте меня если я ошибся

P.S. Через некоторое время попробую составить сложное меню и проверить на баги. А вообще спасибо за блок, раньше приходилось извращаться.
Вложения
9692688.jpg

Аватара пользователя
shvromyou
Рядовой
Сообщения: 44
Зарегистрирован: 28.03.2016{, 12:28}
Репутация: 3
Имя: Роман

Не работает блок меню

#37

Сообщение shvromyou » 29.10.2016{, 01:41}

При  выборе типа переменной Float и снятом чек-боксе "Сохранить в EEPROM"-- ошибка компиляции. Со включенным чек-боксом -- всё компилируется.

Arduino: 1.6.3 (Windows 7), Плата"Arduino Uno"

pr5.ino: In function 'void _menuSaveToEEPROMItem(byte)':

pr5.ino:573:80: error: 'EEPROMWriteFloat' was not declared in this scope

Ошибка компиляции.
Последний раз редактировалось shvromyou 29.10.2016{, 01:42}, всего редактировалось 1 раз.

Naladchik
Капитан
Сообщения: 822
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 151
Откуда: Новосибирск
Имя: Павел

Не работает блок меню

#38

Сообщение Naladchik » 29.10.2016{, 12:26}

support писал(а):Вариант с отслеживанием конца редактирования тянет за собой как минимум увеличение кода, так и  и удвоение переменных. Веди для того что бы при выходе из меню определить необходимость записи в память, необходимо старое значение где то сохранить.  Ну или сравнивать с записанным в EEPROM.
Зачем такие сложности? Вводится флаг (битовая переменная) "Значение изменилось", при вхождении в любой пункт меню, где есть какая либо переменная, флаг сбрасывается. При появлении сигнала на каком либо входе, влияющем на значение переменной, флаг взводится. При выходе из пункта меню проверяется состояние флага взведен - пишем в EEPROM, не взведен - не пишем.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
shvromyou
Рядовой
Сообщения: 44
Зарегистрирован: 28.03.2016{, 12:28}
Репутация: 3
Имя: Роман

Не работает блок меню

#39

Сообщение shvromyou » 29.10.2016{, 18:42}

Меню--Тип переменной--Boolean--Собственый текст -- Сохранить в EEPROM
Не сохраняет.
Вложения
7485400.flp
(94.24 КБ) 78 скачиваний

Гость

Не работает блок меню

#40

Сообщение Гость » 19.05.2017{, 14:12}

Добрый день .

А кто нибудь пробовал изменять значения с помощью непосредственного вода цифр?

Что-то не получается ...
Если ставлю галочку "непосредственного вода цифр", то при компиляции -"вылет программы Изображение
Что делать?

Изображение

Странно, -вытащил этот блок поставил в другой проект ,ошибок нет "проект корректен"
Вложения
7096127.png
Последний раз редактировалось Гость 19.05.2017{, 14:34}, всего редактировалось 1 раз.

Ответить

Вернуться в «Архив (Версия 2.1)»