Pagina 1 di 3

Da float a string in C

MessaggioInviato: 30 lug 2013, 0:29
da lcua31989
Salve,

ancora vi chiedo un aiutino in programmazione, perché non riesco a convertire i float in stringa. Ovvero io leggo da un sensore di temperatura un valore che viene convertito mediante una determinata formula. Il problema è che questa funzione ritorna un float come ci si dovrebbe aspettare. Io dovrei inviare ad un modulo con RS232 tale valore. Ho provato a fare come segue, ma non funziona; vengono inviati caratteri a caso.

Codice: Seleziona tutto

void main()
{
  unsigned short int decimale=0, unita=0, decine=0;
  unsigned int number_stored=0, conv_temp=0;
  float threshold_temp=11.1, temp=11.1;
  char mex[]={'t','=','x','x','.','x'};

  conv_temp = temp*10;

  decimale = conv_temp%10;
  unita = (((conv_temp - decimale)/10)%10)
  decine =(((conv_temp - decimale)-(unita*10))/100)
}


Cosa c'è di sbalgliato? Avete qualche altro suggerimento?

Saluti,
lcua31989

Re: da float a string in C

MessaggioInviato: 30 lug 2013, 8:53
da DirtyDeeds
lcua31989 ha scritto:Cosa c'è di sbalgliato?


Mancano un paio di punti e virgola, è scritto abbastanza male e in più non viene generata nessuna stringa. Se non completi il codice come facciamo a dirti cosa c'è che non va?

lcua31989 ha scritto:Avete qualche altro suggerimento?


Se c'è e hai spazio usa la sprintf (o la snprintf).

PS: la temperatura è sempre positiva?

Re: da float a string in C

MessaggioInviato: 30 lug 2013, 10:52
da lcua31989
Codice: Seleziona tutto
void main()

unsigned short int decimale=0, unita=0, decine=0; 
unsigned int number_stored=0, conv_temp=0; 
float threshold_temp=11.1, temp=11.1; 
char mex[]={'t','=','x','x','.','x'}; 

conv_temp = temp*10; 
decimale = conv_temp%10; 
unita = (((conv_temp - decimale)/10)%10);
decine = (((conv_temp - decimale)-(unita*10))/100);
mex [5] = decimale+48;
mex [3] = unita+48;
mex [2] = decine+48;
Uart1_Write_Text (mex);
}


Il problema è che la sprintf o la snprintf mi occupano troppo spazio nella ram e sono molto limitato. La funzione legge sia valori positivi che negativi, ma nella realtà la temperatura è sempre positiva e non inferiore a 5 gradi. Questo perché il termostato principale ha la funzione antigelo.

Ciao
lcua31989

Re: da float a string in C

MessaggioInviato: 30 lug 2013, 10:58
da DirtyDeeds
Scusa ma l'argomento della funzione

Codice: Seleziona tutto
Uart1_Write_Text (mex);


non deve essere una stringa terminata con il carattere '\0'?

Il tuo vettore mex[] non è terminato. Se vuoi terminarlo devi inizializzarlo come

Codice: Seleziona tutto
char mex[] = "t=xx.x";

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 12:35
da lcua31989
Ciao,

ho provato come DirtyDeeds ma non funziona ugualmente. Pare che l'operazione % porti qualche errore, ma non capisco il perché.

saluti,
lcua31989

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 13:15
da DirtyDeeds
Riporta i valori che ottieni delle diverse variabili.

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 13:18
da Paolino
Ma il codice che hai scritto è implementato esattamente così nel micro?

Prova con:

Codice: Seleziona tutto
void main()

unsigned short int decimale=0, unita=0, decine=0;
unsigned int number_stored=0, conv_temp=0; 
float threshold_temp=11.1, temp=11.1; 
char mex[]={'t','=','x','x','.','x'}; 

conv_temp = temp*10; 
decimale = conv_temp%10; 
unita = (((conv_temp - decimale)/10)%10);
decine = (((conv_temp - decimale)-(unita*10))/100);
mex [5] = decimale+48;
mex [3] = unita+48;
mex [2] = decine+48;
Uart1_Write_Text (mex);

while(1); /* AGGIUNGI QUESTA RIGA */

}


Che micro stai usando? Puoi andare in modo debug e vedere quanto vale la variabile conv_temp?

Ciao.

Paolo.

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 13:22
da DirtyDeeds
Comunque che la stringa debba essere terminata con il carattere nullo è chiaramente indicato nel manuale della libreria: Uart1_Write_Text.

Lo stesso manuale, però, dice anche che prima di usare questa funzione è necessario richiamare Uart1_Init.

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 14:45
da lcua31989
ciao,

DirtyDeeds ha scritto:Che micro stai usando? Puoi andare in modo debug e vedere quanto vale la variabile conv_temp?


Sto usando un PIC 16F1827. Purtroppo non credo che mikroc abbia la modalità di debug.

Paolino ha scritto:Lo stesso manuale, però, dice anche che prima di usare questa funzione è necessario richiamare Uart1_Init.


Questo è un pezzo di programma, la Uart1_Init(9600) la richiamo dalla funzione picSetup(). La comunicazione RS232 è OK al 100% riesco a ricevere con interrupt e inviare tramite le funzioni Uart1_Write_Text(char *s), o Uart1_Wire(char x)

Saluti
lcua31989

Re: Da float a string in C

MessaggioInviato: 30 lug 2013, 14:48
da DirtyDeeds
lcua31989 ha scritto:Questo è un pezzo di programma,


Certo che se continui a riportare pezzi di programma che c'entrano poco con il programma che non funziona come pensi che ti si possa aiutare?