Страница 2 из 3

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

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

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

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

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

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

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

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

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

Добавлено: 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:42}
support
Я думал над вариантом с отдельной кнопкой - "Применить изменённое значение". Но это опять во первых дополнительный код  и переменные (что в разрезе ардуинки критично). Ведь где-то надо хранить редактируемое значение. Ну и соответственно ещё один вход самой ардуинки для кнопки. Обычный сценарий для меню - это установка настроечных данных для конкретного экземпляра изделия. Они обычно меняются один - два раза за время жизни устройства. Ну или например уставка температуры. Меняется в среднем пару раз в сезон. Если это где то в тех процессе, то один раз ставятся уставки для разных режимов, и просто переключаются между ними, но сами уставки меняются редко. Я пока не вижу юзеркеёса где часто надо будет менять уставки на большую величину с помощью кнопок + и -.  Рука кнопку держать устанет))))))

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

Добавлено: 20.10.2016{, 17:44}
nalnik
support
Спасибо Вам.
А Я хочу аленький цветочек. - Шутка.

Хорошо если бы в епром при первом пуске и выборе Мин/Макс в МЕНЮ записывалось значение в диапазоне Мин/Макс , а то бывает что записывается 168888 подобное значение при заданных 10/40

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

Добавлено: 20.10.2016{, 17:52}
Слимпер
support, ну меня просто смутил такой подход, как уже писал выше. Можно сделать не сильно увеличивая код (как мне кажется).

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

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

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

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

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

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

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

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

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

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

Добавлено (20.10.2016, 18:51)
---------------------------------------------
Dev1, Странно почему у меня не получается. Может проблема в операционной системе? Если Вам не сложно, попробуйте скомпилировать мой проект, с выбранной переменной float
P.S. использую windows7

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

Добавлено: 20.10.2016{, 19:44}
Dev1
Sergik писал(а):Dev1, Странно почему у меня не получается. Может проблема в операционной системе? Если Вам не сложно, попробуйте скомпилировать мой проект, с выбранной переменной floatP.S. использую windows7
Прикрепления: 5300113.jpg(138Kb) · My_menu.flp(841Kb)
Выставил везде Float, компилируется. У меня стоит апдейт от 19.10.2016 UpdateFlprog_2-0_to_2-1.zip

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

Добавлено: 20.10.2016{, 21:08}
Sergik
Dev1, спасибо что проверили, попробовал переустановить программу, выполнить  UpdateFlprog_2-0_to_2-1, но результат тот-же.

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

Добавлено: 22.10.2016{, 14:35}
kalobyte
хотел бы вернуться к вопросу об ошибке
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ц видит свою

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 29.10.2016{, 01:41}
shvromyou
При  выборе типа переменной 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

Ошибка компиляции.

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

Добавлено: 29.10.2016{, 12:26}
Naladchik
support писал(а):Вариант с отслеживанием конца редактирования тянет за собой как минимум увеличение кода, так и  и удвоение переменных. Веди для того что бы при выходе из меню определить необходимость записи в память, необходимо старое значение где то сохранить.  Ну или сравнивать с записанным в EEPROM.
Зачем такие сложности? Вводится флаг (битовая переменная) "Значение изменилось", при вхождении в любой пункт меню, где есть какая либо переменная, флаг сбрасывается. При появлении сигнала на каком либо входе, влияющем на значение переменной, флаг взводится. При выходе из пункта меню проверяется состояние флага взведен - пишем в EEPROM, не взведен - не пишем.

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

Добавлено: 29.10.2016{, 18:42}
shvromyou
Меню--Тип переменной--Boolean--Собственый текст -- Сохранить в EEPROM
Не сохраняет.

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

Добавлено: 19.05.2017{, 14:12}
Гость
Добрый день .

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

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

Изображение

Странно, -вытащил этот блок поставил в другой проект ,ошибок нет "проект корректен"