Ciao Leo,
ti rigrazio ho risolto convertendo la variabile val da float a testo con la seguente funzione:
String ftoa(float number, uint8_t precision, uint8_t size)
{
//Prints val with number of decimal places determine by precision
//precision is a number from 0 to 6 indicating the desired decimial places
//example: printDouble(3.1415, 2); // prints 3.14 (two decimal places)
//Added rounding, size and overflow #
//ftoa(343.1453, 2, 10) -> " 343.15"
//ftoa(343.1453, 4, 7) -> "# "
String s = "";
// Negative
if (number < 0.0)
{
s = "-";
number = -number;
}
double rounding = 0.5;
for (uint8_t i = 0; i < precision; ++i) rounding /= 10.0;
number += rounding;
s += String(uint16_t(number)); // prints the integer part
if(precision > 0)
{
s += "."; // prints the decimal point
uint32_t frac;
uint32_t mult = 1;
uint8_t padding = precision -1;
while(precision--) mult *= 10;
frac = (number - uint16_t(number)) * mult;
uint32_t frac1 = frac;
while(frac1 /= 10) padding--;
while(padding--) s += "0";
s += String(frac,DEC) ; // prints the fractional part
}
if (size>0) // checks size
if (s.length()>size) return("#");
else while(s.length()<size) s = " "+s;
return s;
}
Questo è il punto dove viene richiamata:
static void print_float(float val, float invalid, int len, int prec)
{
char sz[32];
if (val == invalid)
{
strcpy(sz, "*******");
sz[len] = 0;
if (len > 0)
sz[len-1] = ' ';
for (int i=7; i<len; ++i)
sz[i] = ' ';
//Serial.print(sz);
datigps += String(sz);
}
else
{
//Serial.print(val, prec);
String temp = ftoa(val, prec, 10); //<-- <-- <-- Qui!
temp.trim();
datigps += temp;
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1);
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
{
//Serial.print(" ");
datigps += " ";
}
}
feedgps();
}
Grazie ancora e a presto.
Alessandro