converter float ou int para string

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

converter float ou int para string

Mensagempor cristian » 24 Jun 2011 20:34

no lpc1343 fiz a conversao AD e ja transformei em volts usando isso

Código: Selecionar todos
float ValueVolts = Counts*SUPPLY_VOLTAGE/ADC_COUNT_MAX;


mas agora eu quero enviar pra UART e futuramente pra USB e um display

no mikroc usava WORDTOSTR e ele jogava num array , ai fica facil

e no KEIL como é ???
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor Red Neck Guy » 24 Jun 2011 21:32

Olha, independente do compilador, tu pode uilizar sprintf pra isso. Algo do tipo
....

Código: Selecionar todos

char bufferChar[20];

sprintf(bufferChar,"%f",variavel_float_com_o_valor_calculado);


Dá pra fazer uma série de configurações ali e tal...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor cristian » 24 Jun 2011 21:37

srsrsrsrs. veja so como eu fiz....


Código: Selecionar todos
   float ValueVolts = Counts*SUPPLY_VOLTAGE/ADC_COUNT_MAX;


   INTvalor=(int)(ValueVolts*1000);

 UARTBuffer[0]=((INTvalor/1000)+0x30);
 auxbuf= (INTvalor%1000);
 UARTBuffer[1]=((auxbuf/100)+0x30);
 auxbuf=auxbuf%100;
 UARTBuffer[2]=((auxbuf/10)+0x30);
 auxbuf=auxbuf%10;
 UARTBuffer[3]=(auxbuf+0x30);
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor cristian » 24 Jun 2011 22:09

mas tudo tem seu preço


o meu codigo caseiro gastou 284bytes

o sprintf gastou 2924 bytes



eu to nessa de economizar memoria por causa do pic ...r.srsrsrs
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor polesapart » 24 Jun 2011 23:01

Olha só, não é o melhor dos exemplos, mas geralmente as funções pra converter inteiro em string são variantes disto aqui:

Código: Selecionar todos
// O tamanho máximo do buffer.
#define ITOA_BUFLEN 10
char *itoa(uint64_t dwVal, char * __restrict cTemp, unsigned int wBase)
{
  char *pChar;
  pChar = cTemp + ITOA_BUFLEN;
  *--pChar = 0;
  do {
    char ch = (unsigned int)dwVal % wBase + '0';
    if (ch > '9')
      ch += 'a' - '9' - 1;
    *--pChar = ch;
    dwVal /= wBase;
  } while (dwVal && (pChar != cTemp));
  return pChar;
}


Deste jeito você pode imprimir em binário, octal, decimal, hexadecimal ou qualquer base maluca que você inventar. Se substituir a base por um valor fixo o código costuma enxugar mais ainda.
Warning: time of day goes back (-163479us), taking countermeasures. :)
Avatar do usuário
polesapart
Byte
 
Mensagens: 477
Registrado em: 19 Nov 2007 12:56
Localização: Curitiba


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x