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

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

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

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

 ? F 

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

Из-за некоторых причин производительности %f не входит в реализацию Arduino’s 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); 

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

Как уже было сказано, поддержка Float не включена в sprintf на Arduino.

Класс строк

У Arduino есть свой собственный class String .

 String value = String(3.14); 

тогда,

 char *result = value.c_str(); 

Ссылка на class String, ссылка выше

Создает экземпляр classа String. Существует несколько версий, которые строят строки из разных типов данных (т. Е. Форматируют их как последовательности символов), в том числе:

  • постоянная строка символов, в двойных кавычках (т. е. массив символов)
  • один постоянный символ, в одинарных кавычках
  • другой экземпляр объекта String
  • постоянное целое или длинное целое число
  • постоянное целое или длинное целое число, используя указанную базу
  • целочисленная или длинная целочисленная переменная
  • целочисленную или длинную целую переменную, используя указанную базу
  • float или double, с использованием заданных десятичных знаков
  • В чем разница между спецификаторами преобразования% i и% d в форматированных IO-функциях (* printf / * scanf)
  • Определение размера буфера sprintf - какой стандарт?
  • понимая опасности sprintf (...)
  • «% d» ожидает аргумент типа «int», но аргумент 2 имеет тип «long unsigned int»
  • Заполнение символов в printf
  • Как можно печатать переменную size_t портативно с помощью семейства printf?
  • printf не печатать на консоли
  • Кросс-платформенный формат строки для переменных типа size_t?
  • Спецификаторы формата printf для uint32_t и size_t
  • Печать шестнадцатеричных символов в C
  • Как напечатать строку с нулевым завершением с помощью printf?
  • Давайте будем гением компьютера.