sbaglio nell'usare la sprintf?

ciao, gente, sono sicuro di sbagliare, ma non trovo dove. ho fatto varie prove, ma mi esce sempre %f invece del numero che mi aspetto il resto del programma è OK, è la quarta zucca è bianca, quello che ho postato ieri, ci ho aggiunto la lettura della temperatura, che da seriale è OK, letta bene

      float temp;

      do {
        DS18B20.requestTemperatures();
        temp = DS18B20.getTempCByIndex(0);


      } while (temp == 85.0 || temp == (-127.0));

      Serial.print (temp);
      char tempascii[] = "nel tuo castello ci sono 00000 gradi    ";
      // converto la temperatura da float a char[]
      Serial.print("conversione: ");
      Serial.println ( sprintf(tempascii, "nel tuo castello ci sono %f gradi", temp));
      trasmettialbot( mittente , tempascii);

mi arriva sempre nel tuo castello ci sono %f gradi echeccavolo

%for non è supportato nella sprintf() di Arduino perché è piuttosto pesante. Mi pare esista un #define per abilitarlo ma non ricordo dove.

PS: Impara subito a usare snprintf() al posto di sprintf().

... perché, per motivi di spazio, su AVR, NON è implementata, per la sprintf, la parte di "float", quindi NON la puoi usare.

Devi convertire in qualche altro modo il float, ad esempio, in stringa, ed inserire nella sprintf, dove deve apparire il float, la stringa equivalente.

Guglielmo

SukkoPera: %for non è supportato nella sprintf() di Arduino perché è piuttosto pesante. Mi pare esista un #define per abilitarlo ma non ricordo dove.

Se ben ricordo bisogna propri cambiare il modulo oggetto compilato della libreria e non basta una semplice #define. In ogni cosa è da sconsigliara data l'enorme occupazione di memoria.

Molto più semplice e leggero convertire il float in stringa (classica del 'C') e mettere nella sprintf (o snprintf) la stringa equivalente.

Guglielmo

... ancora più semplice e leggero, convertire il float in due int ... parte intera, metterci in mezzo un '.' e, sempre come intero, la parte decimale ;)

Guglielmo

Sì, probabilmente hai ragione. Ho un ricordo di una #define ma non riesco proprio a trovarla, forse era in una sprintf() alternativa, boh.

Puoi usare dtostrf() oppure la libreria PString.

Grazie, un bello scorno

OK grazie a tutti ho risolto