web-dev-qa-db-ja.com

Arduino sprintf floatがフォーマットされていません

私はこのアルドゥイノのスケッチを持っています、

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

温度は

? F

このフロートをフォーマットする方法についての考えはありますか?文字列にする必要があります。

38
Mistergreen

いくつかのパフォーマンス上の理由により、_%f_はsprintf()のArduinoの実装に含まれていません。より良いオプションはdtostrf()を使用することです-浮動小数点値をCスタイルの文字列に変換します。メソッドのシグネチャは次のようになります:

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

このメソッドを使用してCスタイルの文字列に変換し、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);
_

変換するフロートに合わせて、最小の幅と精度を変更できます。

93
Dinal24

前に述べたように、FloatサポートはArduinoのsprintfに含まれていません。

文字列クラス

Arduinoには、独自の String クラスがあります。

String value = String(3.14);

その後、

char *result = value.c_str();

文字列クラス参照、上記のリンク

Stringクラスのインスタンスを構築します。さまざまなデータ型から文字列を構築する(つまり、文字列としてフォーマットする)複数のバージョンがあります。

  • 二重引用符で囲まれた文字の定数文字列(つまり、char配列)
  • 単一引用符で囲まれた単一の定数文字
  • stringオブジェクトの別のインスタンス
  • 定数整数または長整数
  • 指定された基数を使用する定数整数または長整数
  • 整数変数または長整数変数
  • 指定された基数を使用した整数または長整数変数
  • 浮動小数点または倍精度浮動小数点数、指定された10進数のパレットを使用して