Преобразование void* в переменные разного типа

код не компилируется, потому что куча переменных не описана.

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

Но я все-таки добавлю - где у вас в этом коде хоть один вызов процедуры

printDisplay()

укажите номер строки, я что-то не нашел

1000 рублей - это плата за урок.
Урок о том, что задавая вопросы - надо уважительно относится к тем, кто пытается вам помочь. А значит не надо заставлять помогающих вытрясывать из вас суть проблемы так, будто вы партизан на допросе.
И если вам сказали, что нужен полный код - то нужно именно такой и предоставить.

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

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

Если бы я знал, какой части ошибка, я бы не просил помощи.

не компилируется.

Почему бы вам, прежде чем выкладывать код - САМОМУ не попробовать его откомпилировать?

(это я уже максимально сдерживаюсь, дальше будет матом)

2 лайка

вот видите, а всего 20 минут назад вы уверенно писали:

Так что не надо говорить, что 1000р я прошу зря. Вы их даже еще не заплатили, а они уже действуют.

как-то очень сомнительно.Или может все это давно в прошлом.
У нас тут вы себя показали очень упрямым и не особо сообразительным… причем речь не про программирование, а про общение в форуме.

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

Вывода переменной нет.
Как вы узнаете, преобразовалось значение или нет?

ЗЫ Исправляя код, лучше каждый раз выкладывать его новым сообщением.

В Proteuse по шагам проверяю. Пока Вам писал нашел ошибку, переменная *t показывает правильное значение. А вот

CurrentValue = String(*t);

выдает “…”

Вы, простите, что за бред пишите?
строчка

ничего никуда не выдает.
Где у вас вывод этого значения куда нибудь?

Вообще, забудьте про эти строчки. ОНИ ПРАВИЛЬНЫЕ.
Ищите ошибку в другом месте.

У вас и кроме этого, куча бредятины в коде.

Например, обьясните мне, что делает эта строчка?

   !ReadMenuValue();

или, даже более интересно, зачем перед именем процедуры воскл знак?

Я же говорю, это куски нормально работающего кода. Не всё смог “почистить”.

char buff[10];
sprintf(buff, "%.1f", *t);
CurrentValue = String(buff);

вот так работает. И выдает правильные значения.
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 строк - совершенно бредовая смесь структур, массивов, каких-то перекрестных ссылок. Вы сами себя запутали. Начните с чего-нибудь простотого.

Может сказать где? Я не вижу.

ошибки?

например строки 134 156 163…

И еще - пожалуйста прочитайте сообщение 53 и ответьте на него. Без этого нет смысла двигаться дальше.