• Система автоматизации с открытым исходным кодом на базе 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.
 
Сверху Снизу