collapse

* Links de Robótica

* Posts Recentes

Perfis V-Slot vs C-Beam vs Bosch vs 8020 por LVirtual
[Hoje às 17:00]


Ajuda Projecto IR / RF por Njay
[20 de Outubro de 2017, 13:24]


Medir Agua que está no Poço por edeweld
[18 de Outubro de 2017, 09:15]


Equipar laboratorio por LVirtual
[13 de Outubro de 2017, 08:34]


Arranjo de Berbequim por jm_araujo
[13 de Outubro de 2017, 08:34]


Escolher ligações por dropes
[08 de Outubro de 2017, 23:26]


Ideias para construir um quadrúpede simples por Njay
[07 de Outubro de 2017, 22:12]


Meu projecto - Arm Robot com arduino por Diogo Bento
[05 de Outubro de 2017, 20:54]


Alimentar arduino nano com 12V por helderjsd
[05 de Outubro de 2017, 16:26]


Compra Colectiva RS-Amidata por Hugu
[02 de Outubro de 2017, 20:20]

Autor Tópico: Float to String  (Lida 3848 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Float to String
« em: 06 de Fevereiro de 2010, 23:14 »
Bem não sei se é cansaço ou burrice minha mas estou com dificuldade em transformar valores float (temperatura) em string.

eu fiz esta função :

Código: [Seleccione]
void floatToStr(char * outstr, float value, int places) {
  dtostrf(value,sizeof(value),places,outstr);
}

mas o que acontece é que os valores ficam arredondados! isto é eu quero que apareca a temperatura no lcd apenas com uma casa decimal e quando faço isso:

Código: [Seleccione]
char StrTemp[20];

lcd.printIn( floatToStr(StrTemp, temperatura, 1) ;
 

no lcd realmente aparece a temperatura com 1 digito, mas o valor dele não é real.

Alguém sabe de outra função que posso transformar Float em String e retirar digitos do float.
 :-\
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.101
    • Tróniquices
Re: Float to String
« Responder #1 em: 06 de Fevereiro de 2010, 23:26 »
Não conheço a dtostrf(), mas de certeza que é sizoef(value) e não o tamanho de outstr?

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #2 em: 06 de Fevereiro de 2010, 23:35 »
Bem deixa-me ver. Eles dizem que é o "width". portanto deve ser o tamanho do valor ? certo.

Citar
The dtostre() function returns the pointer to the converted string s.

char* dtostrf   (   double    __val,
signed char    __width,
unsigned char    __prec,
char *    __s   
)         
The dtostrf() function converts the double value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing sufficient storage in s.

Conversion is done in the format "[-]d.ddd". The minimum field width of the output string (including the '.' and the possible sign for negative values) is given in width, and prec determines the number of digits after the decimal sign. width is signed value, negative for left adjustment.

The dtostrf() function returns the pointer to the converted string s.

aprendi aqui: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #3 em: 07 de Fevereiro de 2010, 00:08 »
Bem experimentei assim :

Citar
char StrTemp[6]; // 000.00
floatToStr(StrTemp,MaxTempExt,1);
lcd.printIn(StrTemp);


// ****************************************************************************************************
//
// Funcao: floatToStr - Transforma a variavel float em string
// Retorno: nada (guarda numa variavel de array char []
//
// ****************************************************************************************************
void floatToStr(char * outstr, float value, int places) {
  dtostrf(value,sizeof(value),places,outstr);
}

e o resultado foi este:

Citar
Temperatura Ambiente: 21.75 C
MaxTemp:21.75 lcd:21.8
MinTemp:21.75 lcd:21.8

Temperatura Ambiente: 21.69 C
MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7


A função arredonda a casa decimal, para cima ou para baixo...Acho que posso viver com isto assim para já  ::)
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #4 em: 07 de Fevereiro de 2010, 01:36 »
Feito à pressa mas creio que é isto que queres:

Código: [Seleccione]
void floatToStr(char *s, float value, int place, char separator){
*s = "" + (int)value + separator + (int)((value%1)*(10*places));
}

Exemplo de chamada:

Código: [Seleccione]
floatToStr(stringDestino, 10.43324, 1, ",");
//deve de retornar "10,4" mas as horas que são já não prometo nada.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #5 em: 07 de Fevereiro de 2010, 02:11 »
Dá me invalid conversion from 'const char*' to 'char'  :-[

Código: [Seleccione]
char StrTemp[6];

floatToStr(StrTemp, MaxTempExt, 1, ".");

void floatToStr(char * outstr, float value, int place, char separator){
*outstr = "" + (int)value + separator + (int)((value%1)*(10*places));
}
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #6 em: 07 de Fevereiro de 2010, 02:13 »
Código: [Seleccione]
floatToStr(stringDestino, 10.43324, 1, ","); está errado, é
Código: [Seleccione]
','

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #7 em: 07 de Fevereiro de 2010, 02:15 »
Lol agora dá-me

 invalid operands of types 'float' and 'int' to binary 'operator%
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #8 em: 07 de Fevereiro de 2010, 02:17 »
Experimenta isto mas é só para despiste:
Código: [Seleccione]
*outstr = "" + (int)value + separator + (int)((value % 1.0)*(10*places));

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #9 em: 07 de Fevereiro de 2010, 02:18 »
dá o mesmo erro
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #10 em: 07 de Fevereiro de 2010, 02:23 »
Vai uma martelada mas por agora o que queres é isso a trabalhar...
Código: [Seleccione]
*outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
Ui que até me doi.. o GCC optimiza :P

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #11 em: 07 de Fevereiro de 2010, 02:24 »
Não é "places", é "place"

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #12 em: 07 de Fevereiro de 2010, 02:28 »
Sim mas dá erro:

Código: [Seleccione]
void floatToStr(char * outstr, float value, int places, char separator){
  *outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
}

 invalid conversion from 'const char*' to 'char'
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Float to String
« Responder #13 em: 07 de Fevereiro de 2010, 02:30 »
Tira daqui o pointer:
Código: [Seleccione]
void floatToStr(char * outstr, float value, int places, char separator){
  outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
}
preguicite aguda n me apetece pensar... a ver se me vou deitar.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #14 em: 07 de Fevereiro de 2010, 02:31 »
Como é string posso passar os valor com isto?

strcat(outstr,(int)value);
strcat(outstr,separator);
strcat(outstr,(int)((value-(int)value)*(10*places)));
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas