Подтвердить что ты не робот

Arduino sprintf float не форматирует

У меня есть этот эскиз arduino,

char temperature[10];
float temp = 10.55;
sprintf(temperature,"%f F", temp);
Serial.println(temperature);

температура печатается как

? F

Любые мысли о том, как форматировать этот float? Мне нужно, чтобы это была строка char.

4b9b3361

Ответ 1

Из-за некоторых причин производительности %f не входит в реализацию Arduino sprintf(). Лучшим вариантом было бы использовать dtostrf() - вы конвертируете значение с плавающей запятой в строку стиля C, подпись метода выглядит следующим образом:

char *dtostrf(double val, signed char width, unsigned char prec, char *s)

Используйте этот метод для преобразования его в строку C-Style, а затем используйте sprintf, например:

char str_temp[6];

/* 4 is mininum width, 2 is precision; float value is copied onto str_temp*/
dtostrf(temp, 4, 2, str_temp);
sprintf(temperature,"%s F", str_temp);

Вы можете изменить минимальную ширину и точность в соответствии с конвертируемой плавающей точкой.

Ответ 2

Как уже говорилось, поддержка Float не включена в sprintf на Arduino.

Класс строк

Arduino имеет свой собственный String класс.

String value = String(3.14);

то

char *result = value.c_str();