Arduinoプログラムでは、GPSで作業していますが、USB経由で座標をarduinoに送信します。このため、入力座標は文字列として保存されます。 GPS座標をfloatまたはintに変換する方法はありますか?
int gpslong = atoi(curLongitude)
とfloat gpslong = atof(curLongitude)
を試しましたが、どちらもArduinoにエラーを発生させます:
error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'
誰か提案はありますか?
int
オブジェクトで String
を呼び出すだけで、toInt
からString
を取得できます(例:curLongitude.toInt()
)。
float
が必要な場合は、atof
を toCharArray
メソッドと組み合わせて使用できます。
char floatbuf[32]; // make this at least big enough for the whole string
curLongitude.toCharArray(floatbuf, sizeof(floatbuf));
float f = atof(floatbuf);
c_str()
は、文字列バッファーconst char *ポインターを提供します。
。
したがって、変換関数を使用できます。int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())
sscanf(curLongitude, "%i", &gpslong)
またはsscanf(curLongitude, "%f", &gpslong)
はどうですか?もちろん、文字列の外観に応じて、書式文字列を変更する必要があるかもしれません。
Arduino IDEで文字列をLongに変換します。
//stringToLong.h
long stringToLong(String value) {
long outLong=0;
long inLong=1;
int c = 0;
int idx=value.length()-1;
for(int i=0;i<=idx;i++){
c=(int)value[idx-i];
outLong+=inLong*(c-48);
inLong*=10;
}
return outLong;
}