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.

30
demandé sur Dinal24 2014-12-26 00:54:07

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.

78
répondu Dinal24 2015-02-18 05:25:09

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
1
répondu Cameron Lowell Palmer 2018-03-31 11:08:24