Перевод температуры Float в String

Shadow77
Offline
Зарегистрирован: 10.01.2016

Здравствуйте!

Дано: температура с датчика DHT22 в формате float.

Надо: вывести ее красиво в переменную формата String. Формат "26.5", "8.3", "-5.2", то есть без плюса, только минус, округление до десятых.

Сложность у меня возникает именно из-за переменной.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Из-за какой переменной?

Про переменную не понял, а про преобразование, берите функцию dtostrf и преобразовывайте на здоровье.

Shadow77
Offline
Зарегистрирован: 10.01.2016
float temper = dht.readTemperature();
String s;
dtostrf(temper, 5, 1, s); 
Serial.print(s);

Мозги уже кипят. (

cannot convert 'String' to 'char*' for argument '4' to 'char* dtostrf(double, signed char, unsigned char, char*)'

Важно получить значение именно в s, чтобы потом с ним работать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

О, господи, ну опишите эту s как char s[16] скажем. Или Вам именно String нужен? Ну, не знаю, ну запихайте это в массив char'ов а потом присвойте его String'у

Shadow77
Offline
Зарегистрирован: 10.01.2016
float temperatura = dht.readTemperature();
int va = temperatura*10;
val = String(va/10, DEC); 
val += ".";
val += String(va%10, DEC);

Оказалось, все намного проще.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Shadow77 пишет:

Оказалось, все намного проще.

Ну, да сначала использовать деление, которого вообще-то в процессоре нет и реализовано программно, а потом ещё и остаток. Уж хоть сделайте их одной функцией :)

А вообще, нормальные люди просто лезут в библиотеку и выкорчёвывают оттуда float к чертям, чтобы и духу не было. Чтобы библиотека сразу int взвращала с нужным множителем вообще никак не прикасаясь к float.

Вот смотрите, Вам float нафиг не нужен, но Вы сначала переводите выичсления во float (в библиотеке), а потом, обратно в int. В результате цепляете к своему коду библиотеку работы с плавающей точкой - примерно 1,5 килобайта. Оно Вам надо? Память девать некуда? :)))

negavoid
Offline
Зарегистрирован: 09.07.2016
  String val = String( round( dht.readTemperature() * 10 ) / 10 );

и ещё с десяток вариантов...