• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp8266 + дисплей +энкодер + датчики

aZholtikov

Active member
Кто то может помочь с кодом?
Код:
  String temp_preset;
  for (int i = 0; i < length; i++) {
    temp_preset += String((char)payload[i]);
  }

  if ( String(topic) == temper_set ) {
    AirTarget = temp_preset.toInt();//конвертация строки в переменную
  }
Задаю temp_preset например 1.6
Но на выходе получаю AirTarget равную 1(округляет в меньшую сторону
У меня температура AirTarget имеет тип int, а temp_preset ввиду его пересылки через брокера mqtt допускается только типом char.
В итоге код
AirTarget = temp_preset.toInt();
"съедает" число с одним знаком после запятой и выдает целое число.
Как это победить?
Можно с костылем.
Пример нужно передать 1.6
На передатчике 1.6*100. Передаем 160. На приемнике 160/100. Получили 1.6.
Ну или через JSON на худой конец.
 

aZholtikov

Active member
Код:
 std::string str = "123.4567";

    // convert string to float
    float num_float = std::stof(str);

    // convert string to double
    double num_double = std::stod(str);
 
На передатчике 1.6*100. Передаем 160. На приемнике 160/100. Получили 1.6.
Беда в том, что я не с датчика получаю значение, а от брокера mqtt в тестовом виде, строкой char.
Получаю например 1.6 - это просто строка.
Передаю это значение строковой переменной String temp_preset
Строку как ни крути не умножить на 100, чтобы потом ее конвертировать в int и поделить на 100.
 
Сверху Снизу