1000 рублей - это плата за урок.
Урок о том, что задавая вопросы - надо уважительно относится к тем, кто пытается вам помочь. А значит не надо заставлять помогающих вытрясывать из вас суть проблемы так, будто вы партизан на допросе.
И если вам сказали, что нужен полный код - то нужно именно такой и предоставить.
1000р - это чтобы вы запомнили, что ошибка была совсем не там, где вы думали, а именно в той части кода, которую вы не хотите показывать.
как-то очень сомнительно.Или может все это давно в прошлом.
У нас тут вы себя показали очень упрямым и не особо сообразительным… причем речь не про программирование, а про общение в форуме.
вот так работает. И выдает правильные значения.
CurrentValue в рабочем коде (в приведенном тоже, только закомментарил, чтобы не тянуть все библиотеки) позволяет вычислить количество символов у значения переменной, дабы разместить её по середине строки (а-ля “выравнивание по центру” в Word).
display.setTextSize(1);
display.setTextSize(2);
display.setCursor(0, 0);
display.print(utf8rus(menuItems[MenuID].Item_Name)); // Название пункта меню выводится без проблем
display.setCursor(63 - CurrentValue.length() * 6, 34);
display.print(CurrentValue); // Значение пункта меню
вы, надеюсь, понимаете, что она будет работать только с элментами меню, которые ссылаются на переменные типа float ?
А если понимаете, зачем вы в свой массив
str_MenuItem menuItems[] = {
// Массив со структурами элементов меню
{ 1, "Команда #1", &str_val }, // Ссылка на переменную типа String
{ 2, "Команда №2", &float_val1 }, // Ссылка на переменную типа float
{ 3, "Команда №3", &float_val2 }, // Ссылка на переменную типа float
{ 4, "Команда №4", &unt8t_val1 }, // Ссылка на переменную типа uint8_t
{ 5, "Команда №5", &unt16t_val1 }, // Ссылка на переменную типа uint16_t
// Тут еще куча пунктов меню
};
напихали ссылки на целые и строковые данные?
Измените массив, чтобы ссылки были только на флоат - и с таким массивом пробуйте.
Пардон. В исходном коде не все команды поддерживаются головным устройством (зависит от модели исполнительного механизма). Т.к. набор команд стандартизован, а исполнительные устройства изготовлены разными фирмами и не все команды поддерживаю разные производители. Головное устройство определяет, какие команды поддерживает конкретное устройство и помечает команды битом “Support”.
В процедуре ReadMenuValue есть проверка этого бита найденной команды. Если команда не поддерживается, то пункт меню “проматывается” до следующего. В рабочей программе обработка кнопок чуть расширена:
case _keyMinus:
do {
if (MenuPos > 1) MenuPos--;
else MenuPos = (MenuLevel == InfoMode) ? menuINFO_names_len : (MenuLevel == ProgramMode) ? menuPRG_names_len
: (MenuLevel == SchedulerMode) ? 1
: 0;
} while (!ReadMenuValue());
break;
У вас какой IQ, простите? как вы могли хоть что-то полезное написать, если не понимаете элементарных вещей?
Куда я должен вставить этот кусок? И что делать с остальными ошибками??
Вы понимаете что значит тестовый код? Это 10-20-30 строчек. Этого вполне достаточно, чтобы проверить, как работают ваши ссылки.
Поймите - вы пытаетесь сделать все и сразу. Насколько я вижу, вы очень слабо знаете С/С+, но при этом сразу бросились кропать проект на тысячи строк.
Так никто не делает.
У вас даже в этом коде, где всего-то 200 строк - совершенно бредовая смесь структур, массивов, каких-то перекрестных ссылок. Вы сами себя запутали. Начните с чего-нибудь простотого.