Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Thiago Felipe Soares Gonçalves

Outro Converter float em string usando programação C

Recommended Posts

Estou tentando converter uma variável float em string usando a biblioteca "stdio.h" e a função "sprintf", porém não esta convertendo a variável float.

 

Utilizo a função desta maneira:

 

sprintf(atualiza_status, "%.2f", temp);

 

Onde, atualiza_status é um char de 10 posições. Sempre que uso este codigo e print algo depois de converte aparece isso:

 

#C?*, onde o "?" deveria ser o numero da minha variável float. 

 

O microcontrolador que estou usando é o ATMEGA328P.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aqui

%.2f

Não quer dizer imprima a variável float com duas casas depois da vírgula ?

 

e o "atualiza_status" vetor não é char? você precisa converter o teu char para float para depois exibir ele como float no print. O print não é uma função de conversão como string.toFloat() ou atof (). 

 

Se ainda não conseguir dá um toque que alguém aqui lhe ajuda. Ou talvez alguém venha antes aqui postar a resposta X)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por curiosidade. o float tem virgula? se lembre que no C o separador é ponto e se a string estiver com virgula(como nos usamos no Brasil) a conversão pode falhar

adicionado 0 minutos depois

Poste se código ai...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • O código abaixo é uma mutretagem que não esta funcionando muito bem, nele uso a função "sprintf", mas pra converter int em string.

     

    void status(float temp, int dog, float pot)		// Atualiza com o status de temperatura e potência 
    {
    	/*int temp2 = temp*100;
    	int pot2 = pot*100;
    	
    	USART_Transmit(0x23);
    	
    	USART_Transmit(0x43);
    	sprintf(atualiza_status,"%d",temp2);
    	USART_putstring(atualiza_status);*/
    	
    	int temp2 = (int)temp;
    	int temp3 = (temp-temp2)*100;
    	
    	int pot2 = (int)pot;
    	int pot3 = (pot-pot2)*100;
    		
    	USART_Transmit(0x23);
    	USART_Transmit(0x43);
    		
    	if(temp2<10)
    	{
    		if (temp2 == 0)
    		{
    			USART_putstring("00");
    		}
    		else
    		{
    			USART_Transmit(0x30);
    			sprintf(atualiza_status,"%d",temp2);
    			USART_putstring(atualiza_status);
    		}
    	}
    	else
    	{
    		sprintf(atualiza_status,"%d",temp2);
    		USART_putstring(atualiza_status);
    	}
    	
    	if(temp3<10)
    	{
    		if (temp3 == 0)
    		{
    			USART_putstring("00");
    		}
    		else
    		{
    			USART_Transmit(0x30);
    			sprintf(atualiza_status,"%d",temp3);
    			USART_putstring(atualiza_status);
    		}
    	}
    	else
    	{
    		sprintf(atualiza_status,"%d",temp3);
    		USART_putstring(atualiza_status);
    	}
    
    	USART_Transmit(0x44);
    	sprintf(dog_pres,"%d",dog);
    	USART_putstring(dog_pres);
    	
    	/*USART_Transmit(0x57);
    	sprintf(atualiza_status,"%d",pot2);
    	USART_putstring(atualiza_status);*/
    	
    	USART_Transmit(0x57);	
    	if(pot2<10)
    	{
    		if (pot2 == 0)
    		{
    			USART_putstring("00");
    		}
    		else
    		{
    			USART_Transmit(0x30);
    			sprintf(atualiza_status,"%d",pot2);
    			USART_putstring(atualiza_status);
    		}
    	}
    	else
    	{
    		sprintf(atualiza_status,"%d",pot2);
    		USART_putstring(atualiza_status);
    	}
    	
    	if(pot3<10)
    	{
    		if (pot3 == 0)
    		{
    			USART_putstring("00");
    		}
    		else
    		{
    			USART_Transmit(0x30);
    			sprintf(atualiza_status,"%d",pot3);
    			USART_putstring(atualiza_status);
    		}
    	}
    	else
    	{
    		sprintf(atualiza_status,"%d",pot3);
    		USART_putstring(atualiza_status);
    	}
    	
    	USART_Transmit(0x2A);
    }

    Basicamente como não consegui converter de float para string eu converti para um numero inteiro com 4 algarismos sendo os dois ultimo os decimais do meu float. 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Publique a parte toda do fonte que não funciona mostrando os tipos de variáveis e tudo o +...

     

    Permita-me...

    O sprintf ocupa um espaço cavalar de memória. Junto com float´s então .. nem falo nada...

    Se não fosse necessária variável tipo float o mc ia adorar. Neste caso poderias transmitir o dado com quase zero lib externa. Algo como:
     

    meu_prinf_de_variavel_inteira_diretamente_pra_serial (unsigned int i)
    {
    while (i)
    	{
    	putc(i%10);
    	i/=10;
    	}
    }

    Desafie-se a entender e fazer algo semelhante para floats. De fato, nem sei se funciona a contento... Qualquer momento eu penso se faço... ou não

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×