Arduino sprintf float pas de formatage
J'ai ce croquis arduino,
char temperature[10];
float temp = 10.55;
sprintf(temperature,"%f F", temp);
Serial.println(temperature);
La Température s'imprime comme
? F
Des réflexions sur la façon de formater ce flottant? J'ai besoin que ce soit une chaîne de caractères.
2 réponses
Pour des raisons de performances, %f
n'est pas inclus dans l'implémentation de sprintf()
par Arduino. Une meilleure option serait d'utiliser dtostrf()
- vous convertissez la valeur à virgule flottante en une chaîne de style C, la signature de la méthode ressemble à:
char *dtostrf(double val, signed char width, unsigned char prec, char *s)
Utilisez cette méthode pour la convertir en une chaîne de style C, puis utilisez sprintf, par exemple:
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);
Vous pouvez modifier la largeur et la précision minimales pour correspondre au flottant que vous convertissez.
Comme cela a été indiqué précédemment, le support Float n'est pas inclus dans sprintf
sur Arduino.
Classe de chaîne
Arduino a sa propre classeString .
String value = String(3.14);
Puis,
char *result = value.c_str();
Référence de classe de chaîne, lien ci-dessus
Construit une instance de la classe String. Il existe plusieurs versions qui construisent des chaînes à partir de différents types de données (c'est-à-dire les formatent en tant que séquences de caractères), y compris:
- une chaîne constante de caractères, entre guillemets doubles (c'est-à-dire un tableau de caractères)
- un seul caractère constant, entre guillemets simples
- une autre instance de l'objet String
- un entier constant ou un entier long
- un entier constant ou un entier long, en utilisant une base spécifiée
- un entier ou une variable entière longue
- un entier ou une variable entière longue, en utilisant une base spécifiée
- un float ou double, en utilisant un nombre décimal spécifié palces