HELP

9 Anni 4 Mesi fa - 9 Anni 4 Mesi fa #1 da elpablito
HELP è stato creato da elpablito
Buon giorno
C'è qualcuno che sa di C e mi dice dove è la Va.......ta
con un float non ci ho mai giocato e non trovo il bandolo

#include "stdio.h" questo l'ho incluso

char buff[10]; il buffer è così definito

ypr[0] *= 180; variabile supponiamo sia 0.03311 naturalmente è tipo f


sprintf(buff,"%f",ypr[0]); istruzione

Mi aspettavo di vedere:

buff[0] = 0
buff[1] = .
buff[2] = 0
buff[3] = 3
buff[4] = 3
buff[5] = 1
buff[6] = 1

invece ho sempre

buff[0] = 0x00
buff[1] = 0x00
buff[2] = 0x33
buff[3] = 0x00
buff[4] = 0x00
buff[5] = 0x00
buff[6] = 0x00

Grazie
Ciao a tutti
Paolo
Ultima Modifica 9 Anni 4 Mesi fa da elpablito.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 4 Mesi fa #2 da elpablito
Risposta da elpablito al topic HELP
Buon giorno
Era evidente che sprintf non era idonea allo scopo, dava i numeri. Dopo un po' di tempo perso sfrugugliando internet ho scoperto che dovevo usare invece ftoa() che sebbene non sia codificata nelle librerie standard, tutti ne parlano come cosa fatta. L'ha trovata per primo Ste su un blog di Stellaris TI, é vero che aveva un paio di errorini, ma una volta corretti, mi sembra vada bene. Provare per credere. La riporto quì visto che potrebbe servire a qualcuno con lo stesso problema .

f è il numero da convertire in stringa.
*buf e il nome del vettore che conterrà i caratteri della stinga.
ix è il numero dei caratteri numerici che converte, vedi il for(ix = 1; ix<8; ix++) verso la fine, attualmente converte 8 caratteri


void ftoa(float f,char *buf){
int pos=0, ix, dp, num;

if (f<0){
buf[pos++]='-';
f = -f;
}
dp=0;
while (f>=10.0){
f=f/10.0;
dp++;
}
for (ix = 1; ix<8; ix++) {
num = f;
f=f-num;
if (num>9)
buf[pos++]='#';
else
buf[pos++]='0'+num;
if (dp==0) buf[pos++]='.';
f=f*10.0;
dp--;
}
}

Salutiamo la banda
Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
9 Anni 4 Mesi fa #3 da stainless
Risposta da stainless al topic HELP
Usi questa funzione per visualizzare numeri float su display? puoi postare un esempio?

int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • stainless
  • Premium Member
  • Premium Member
Di più
9 Anni 4 Mesi fa #4 da elpablito
Risposta da elpablito al topic HELP
La funzione serve a convertire un float in stringa. Quando hai la stringa la puoi mandare a display come vuoi, dipende dal display che usi.
Per fare una prova definisci un float
#define PI 3,14151
quindi un contenitore per il float
char buffer[10];
quindi la funzione
ftoa(PI,buffer);

se vai a vedere il contenuto di buffer troverai:
0x33 0x22 0x31 0x34 0x31 0x35 0x30 0x39 0x39 se nel for hai un 8 pari a 8 cifre
poi manda buffer a display

Modifica poi il numero di cifre e, o il numero, magari con il segno, così vedi come funzia
Spero di esser stato chiaro
Ciao
Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login