Преобразования числа в строку

Тема в разделе "Arduino & Shields", создана пользователем Makhonin, 9 сен 2012.

  1. Makhonin

    Makhonin Гик

    Добрый вечер! столкнулся с такой проблемой: есть переменная типа float. Ее значение нужно перевести в строку, соединить со строкой "S0_" и отправить в порт. То есть в порт должно отправиться, например: "S0_25.15". Как сделать преобразования float числа в строку?
     
  2. Makhonin

    Makhonin Гик

    Должна же быть какая-нибудь функция преобразования
     
  3. Unixon

    Unixon Оракул Модератор

    sprintf() ?
     
  4. Код (Text):
    float num = 15.25;
    char* msg;
    void setup()
    {
    Serial.begin(9600);
    sprintf(msg, "S0_%d", num);
    Serial.println(msg);
    }
    void loop()
    {
    }
    Проверяйте!
     
  5. Makhonin

    Makhonin Гик

    Я сделал так:
    Код (Text):
    int a = 125;
    String b;
    b = String(a);
     
  6. Makhonin

    Makhonin Гик

    Но все равно спасибо за еще один способ
     
  7. Код (Text):
    Я сделал так:
    Код:
     
    int a = 125;
    String b;
    b = String(a);
     
     
    А полностью код не можете привести?
     
  8. Makhonin

    Makhonin Гик

    Тут и так, по сути, уже весь код написан. Но только уж, чтобы все откомпилировалось:
    Код (Text):
    String s;
    int a;
    void setup() {
      a = 25;
      Serial.begin(9600);
    }
     
    void loop()
    {
      s = "S0_"+String(a);
      Serial.println(s);
      delay(100);
    }
     
  9. У вас же тип float, а не int в вопросе!
    Тогда уж так:
    Код (Text):
    String s;
    float a;
    void setup() {
      a = 25.77;
      Serial.begin(9600);
    }
     
    void loop()
    {
      s = "S0_"+String(a);
      Serial.println(s);
      delay(100);
    }
     
  10. iKarma

    iKarma Нуб

    Всем привет.

    Пытаюсь сделать преобразование из строки в число следующим образом:
    Код (Text):

    float hum = ((float)DHT11.humidity, 2);
    float temp = ((float)DHT11.temperature, 2);
    String result = String(hum) + "," + String(temp);
    Serial.print(result);
     
    На выходе получаю строку:
    Датчик работает корректно, в чём проблема?

    Заранее спасибо!
     
    Последнее редактирование: 23 май 2015
  11. X-Dron

    X-Dron Гик

    float hum = ((float)DHT11.humidity, 2);
    Вообще странная конструкция, не понятно что собираетесь сделать.
    Какой тип у членов класса .temperature и .humidity в библиотеке?
    Если float, то достаточно такого вывода
    Serial.print(DHT11.humidity, 2);
    Serial.print("," /t);
    Serial.println(DHT11.temperature, 2);

    если int с фиксированной точкой, скажем в 1 знак после запятой, то
    Serial.print(float(DHT11.humidity)/10, 1);
    Serial.print("," /t);
    Serial.println(float(DHT11.temperature)/10, 1);
     
    iKarma нравится это.
  12. geher

    geher Гуру

    Проблема в том, что контрукция
    float hum = ((float)DHT11.humidity, 2);
    никак не выполняет то, что задумано, а просто присваивает двойку (результат вычисления выражения ((float)DHT11.humidity, 2)), поскольку результатом выполнения оператора ',' (запятая) является последнее выражение в списке.

    Если я правильно понял, то задумано присваивание DHT11.humidity (кстати, какой у него тип?) переменной float, чтобы значение было с двумя знаками после запятой.

    Если предположить, что DHT11.humidity - это строка, которая char* (исхожу из фразы "преобразование из строки в число"), то можно так.
    Код (Text):
    Serial.print(String(DHT11.humidity).toFloat,2);
    Serial.print(",");
    Serial.print(String(DHT11.temperature).toFloat,2);
     
    Если же это String, то все еще проще:
    Код (Text):
    Serial.print(DHT11.humidity.toFloat,2);
    Serial.print(",");
    Serial.print(DHT11.temperature.toFloat,2);
     
    Если необходимо округлить до второго знака значение, хранимое во float, то
    float hum=round(DHT11.humidity.toFloat*100)/100
    (исхожу из того, что DHT11.humidity - это String).
    Естественно в силу особенностей обработки типа float может получиться не точно два знака после запятой, но число будет приближено к необходимому, а окончательная шлифовка картинки должна осуществляться при выводе.
     
    iKarma нравится это.
  13. iKarma

    iKarma Нуб

    Спасибо, разобрался :)
     
  14. max1234

    max1234 Нуб

    Привет Ребята ! Уже 3 дня бьюсь над обработкой данных из буфера ! не могу правильно посчитать данные из за данных в виде Hex , а надо в Dec. скажите как переконвертировать ? и потом уже спокойно делать арифметику
    if (RxBuffer[0] == 0x83 && RxBuffer[1] == 0xF1
    && RxBuffer[2] == 0x13 && RxBuffer[3] == 0x41 && RxBuffer[4] == 0x07) {
    s = String(RxBuffer[5] , DEC);
    Serial.println("");
    Serial.print(s);
    Long = s.toInt() * 0,78125 - 100;
    // Long = (RxBuffer[5]);//* 0,78125 - 100 ;
    // Long = (Long, DEC) * 0,78125 - 100;
    // Long = Long / 128;
    RxBuffer[5] = 0;
    Serial.println("");
    Serial.print("Long ");
     
  15. max1234

    max1234 Нуб

    В буфере (RxBuffer[5]) данные приходят в Hex. Вот эти 2 стречки мне не удаются ни как .. Что не правильно делаю ? s = String(RxBuffer[5] , DEC); и Long = s.toInt() * 0,78125 - 100; особенно s.toInt().
     
  16. akl

    akl Гуру

    а можно пример таких "данных в виде Нех"? что именно там может лежать в RxBuffer[5],RxBuffer[6] и т.д.?
    или данные это значение ячейки RxBuffer[5] в виде числа?