Ir ao conteúdo
  • Cadastre-se

Outro Converter float em string usando programação C


Posts recomendados

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.

Link para o comentário
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)

Link para o comentário
Compartilhar em outros sites

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. 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!