Dans un programme Arduino, je travaille sur le GPS qui envoie les coordonnées à l'arduino via USB. Pour cette raison, les coordonnées entrantes sont stockées sous forme de chaînes. Existe-t-il un moyen de convertir les coordonnées GPS en float ou int?
J'ai essayé int gpslong = atoi(curLongitude)
et float gpslong = atof(curLongitude)
, mais les deux provoquent une erreur de la part d'Arduino:
error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'
Est-ce que quelqu'un a des suggestions?
Vous pouvez obtenir un int
à partir d'un String
en appelant simplement toInt
sur l'objet String
(par exemple curLongitude.toInt()
).
Si vous voulez un float
, vous pouvez utiliser atof
en conjonction avec la méthode 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()
vous donnera le pointeur const char * du tampon de chaîne.
.
Vous pouvez donc utiliser vos fonctions de conversion :.int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())
Que diriez-vous de sscanf(curLongitude, "%i", &gpslong)
ou sscanf(curLongitude, "%f", &gpslong)
? Selon l'apparence des chaînes, vous devrez bien sûr modifier la chaîne de formatage.
Convertir une chaîne en long dans Arduino IDE:
//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;
}