Arduino sprintf float nie formatuje

Mam ten szkic arduino,

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

Temperatura wyświetla się jako

? F

Jakieś pomysły jak sformatować ten float? To musi być łańcuch znaków.

Author: Dinal24, 2014-12-26

2 answers

Ze względu na pewne przyczyny wydajności {[2] } nie jest uwzględniony w implementacji Arduino sprintf(). Lepszym rozwiązaniem byłoby użycie dtostrf() - przekonwertujesz wartość zmiennoprzecinkową na łańcuch w stylu C, podpis metody wygląda następująco:

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

Użyj tej metody, aby przekonwertować go na ciąg w stylu C, a następnie użyj sprintf, np:

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);

Możesz zmienić minimalną szerokość i precyzję, aby dopasować zmiennoprzecinkowy, który konwertujesz.

 78
Author: Dinal24,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 05:25:09

Jak stwierdzono wcześniej wsparcie Float nie jest zawarte w {[2] } Na Arduino.

Klasa String

Arduino posiada własną klasęString .

String value = String(3.14);

Wtedy,

char *result = value.c_str();

String class reference, link powyżej

Konstruuje instancję klasy String. Istnieje wiele wersji, które konstruują łańcuchy z różnych typów danych (tzn. formatują je jako sekwencje znaków), w tym:

  • stały ciąg znaków w podwójnych cudzysłowach (tj. tablica znaków)
  • pojedynczy stały znak, w pojedynczych cudzysłowach
  • kolejna instancja obiektu String
  • stała liczba całkowita lub długa liczba całkowita
  • stała liczba całkowita lub długa liczba całkowita, przy użyciu określonej bazy
  • zmienna integer lub long integer
  • zmienna integer lub long integer, używając określonej bazy
  • zmiennoprzecinkowy lub podwójny, przy użyciu określonego palca dziesiętnego
 1
Author: Cameron Lowell Palmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-31 11:08:24