Профили с изменяемыми параметрами
- Войдите на сайт для отправки комментариев
Чт, 24/09/2020 - 19:58
Всем привет.
Назрел вопрос. Сам додуматься никак не могу. Просто в голове даже образно не строится алгоритм действий.
Задача следующая.
Нужно сделать 50 профилей в которых будет по 4-6
изменяемых параметра. То- есть, заходим в первый профиль, меняем четыре параметра как надо, сохраняем в eeprom ,со следующими так же.
Подскажите хотябы направление, куда рыть. Интересует именно конструкция такого меню.
Что такое "профиль", что содержит, чем заходим, на что меняем, какой МК используем... Вот направлении ответов на эти вопросы и копайте.
Я наверное не правильно все же объяснил.
Вобщем.
Мне нужно вывести на дисплей номер профиля. Профиль именуется например так "profile 0". Внутри этого профиля имеется от четырех до шести параметров, которые тоже отображаются для читания.
Профиль будет иметь нумерацию от 00 до 50.
Каждый параметр будет содержать число от 00 до 99.
Каждый профиль при переключении, то есть пролистав его вперёд или назад, должен иметь сохраненные параметры которые будут менятся энкодером и соответственно сохраняться в профиль.
Плату хочу использовать НАНО, но пока не точно, в зависимости от веса кода. Если не хватит то другой. Повторюсь, это пока не имеет значения. Для меня сейчас более важно понять, как строится такая структура.
Если это обычные числа - хоть массивом длинной 6*50 байт.
Можете пнуть меня в какую-то похожую тему с кодом, изучу.
Просто как уже говорил, не могу в голове выстроить структуру как это все происходит.
а зачем массив, если в еепроме будет храниться? Сразу оттуда читать/писать когда надо. Создать двухуровневое меню. Одна переменная содержит инфу в каком первом уровне сейчас находимся (от 1 до 50). Дисплей при изменении этой переменной (например двумя кнопками вправо влево), обновляет экран - показывает номер профиля и его параметры.
Вторая переменная показывает в каком параметре сейчас находимся (от 1 до 6). Например долгим нажатием вправо или влево переходим на выбор параметра, а не профиля. Тут уже, крутя энкодер, меняем значение текущего параметра, кликая энкодер запоминаем в еепром.
Можно и без массива - я не заставляю. Но потренироваться лучше на массиве.
Я прошу, пните меня куда-то, где есть код, хочу увидеть/изучить.
Вот как раз на структуре и строится. Берете си-шную структуру и описываете ваш профиль. А потом делаете массив из этих структур.
Ну вот, например -
https://metanit.com/cpp/c/6.4.php
https://ee.kpi.ua/~yv/edu/amp/book/c/07/0702.htm
массив структур в епром?
А какая разница - массив структур или просто структура или просто массив? Везде байты.
массив структур в епром?
ТСу бы сначала разобраться как с этим в ОЗУ работать , а потом уже можно и в EEPROM пихать.
проще работать с епром вроде как. чем побайтно, ++ однако?
Так, немножко всеравно недопонимаю. В структуре я должен описать каждый профиль с каждым его параметром, потом при сравнении вызывать той или иной профиль? То-есть, если у меня 50 профилей то выглядит это так?
или так
А можно словами описать, что за профили и что за параметры и как они изменяются. А то "4-6 изменяемых параметра" очень неопределенно звучить.
Все будет работать одним энкодером.
Ну в таком случае проще всего завести массив или структуру из 4 параметров. И функции записи и получения этого массива или структуры в/из EEPROM по номеру профиля.
Таким образом мы в каждый текущий момент работаем с одним набором параметров плюс у нас есть переменна где храним текущий номер профиля.
тоесть каждый параметр я создаю отдельно ну или вложенный массив?
пример
и как в целом привязать набор параметров к номеру профиля?
еще вопрос. Если у меня данные параметров будут часто меняться, правильно ли будет, обновлять еепром, а не каждый раз записывать?
eeprom_update_byte ?
Насколько часто?
Думаю можно в целом и писать сразу. 5-10 профилей раз в сутки или двое будут меняться.
Открываем https://static.chipdip.ru/lib/549/DOC001549488.pdf
Читаем: Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
Делим 10,000 / 1 раз в сутки, получаем 10,000 суток работы, что составляет 27,3972602739726 лет. Хватит для начала?
так вот тоже только что пересчитал))
Думаю для начала с головой))
Как то так:
Как то так:
Нет.
Нет.
Чой та ?
А что двумерные массивы запретили ? Раз границы заранее известны - зачем городить огород ?
При char* не резервируется под строку область памяти, если я правильно помню.
При char* не резервируется под строку область памяти, если я правильно помню.
А вроде как и не надо.
Я ж сначала объявил и описал структуры,память уже выделена, потом уже их в массив поместил с известной фиксированной длинной строки.
Понятно, что менять structArr[x].name не стоит.
#297 Ну это .Но жевать эту тему не хочу.
Блин зачем вообще структуры и массивы? Работать сразу с еепром. На каждый профиль отвести 6 параметров в еепром. Соответственно у первого профиля адреса параметров в еепром будут ячейки от 0 до 5. У второго - от 6 до 11 и т.д. дисплей обновлять при смене текущего профиля или параметра. Сохранять в еепром нажатием на кнопку энкодера.
С массивом - потренироваться, чтобы EEPROM по глупости в расход не пустить в лупе.
А можно маленький пример кода?
Я просто про это тоже думал, но кажется мне что без структур и массивов это будет не так удобно.
Зачем вам массив, если в каждый момент вы работаете с одним набором параметров? С массивом у вас получается совершенно непроизводительный перерасход памяти
#297 Ну это .Но жевать эту тему не хочу.
в 15 строке menu.h - //ноказ настроек )))
поправь
Я так понимаю, под определенный профиль нужно прописать адрес еепром под каждый параметр?
Если можно, накиньте пожалуйста код примерный, либо пнитев тему где это можно глянуть.
Я уже вообще запутался))
Я так понимаю, под определенный профиль нужно прописать адрес еепром под каждый параметр?
Если можно, накиньте пожалуйста код примерный, либо пнитев тему где это можно глянуть.
Я уже вообще запутался))
Пух, как хорошо что я твой лямбда-взвод вжывую не видел. Мне такое даже приходящая белочка не показывала.
Я так понимаю, под определенный профиль нужно прописать адрес еепром под каждый параметр?
Если можно, накиньте пожалуйста код примерный, либо пнитев тему где это можно глянуть.
Я уже вообще запутался))
Не нужно ничего прописывать. Адрес конкретного параметра будет вычисляться по формуле: Адрес параметра в еепром = номер профиля умножить на 6 + номер параметра. Завести две переменных - текущий номер профиля и текущий номер параметра. Кнопками их выбирать. После выбора можно менять значение, после смены значения нажатием кнопки сохранять в еепром. Адрес вы уже знаете.
Пс. Пух как всегда жгет не по децки
MaksVV, спасибо. Теперь вкурил))
На Форуме всегда найдется несколько пухов, которых пчелы покусали. Мне вот только интересно, строчить сто слов про какую-то армию время есть и его не жалко, а более менее нормально описать времени нет. Пух, примите антидепрессантов, лично вас я о помощи не просил. Но все равно, выражаю свою благодарность за потраченное на меня время...
Пуха может и покусали пчелы, но его с его бредом мы любим больше, чем таких новичков, которым требуется 40 сообщений, чтобы вкурить элементарные принципы.
Такие обьяснения,как у Пуха - они ведь от той депрессухи, что навевают элементарные вопросы, раз за разом задаваемые в форум, вместо того чтоб сесть и немного подумать самому
B707, понял. Извините, больше ничего ни у кого не спрошу. Извините за беспокойство
Тему можно закрыть.
П.с.
Хотел просто вкурить тему быстрее. Изначально я просил пихнуть в тему где есть код уже готовый чтобы изучить, не скопировать тупо, а изучить и понять. Потом, начались перепалки между собой, одни говорили про массив, другие про структуру, третьи за то и другое вместе, вот потому еще больше запутался.
сёдня вечером или завтра утром, если не забуду, накидаю тебе лагаритм. Не плачь.
Без проверок на любые ошибки. Разбирайся