Limitar casas decimais para ler o valor no Arduino

Boa noite pessoal,

Estou com um probleminha, e gostaria da ajuda de vocês. O problema é o seguinte:

Estou lendo armazenando as coordenadas lidas no sensor de GPS em duas variáveis "Float" (uma para latitude e outra para longitude). Porém na Porta Serial só está exibindo o valor com duas casas decimais.

Gostaria de saber como faço exibir 5 casas decimais na Porta Serial para estas duas variáveis?

Desde já agradeço pela atenção. Aguardo Retorno.

Exibições: 8724

Responder esta

Respostas a este tópico

Se as variáveis float que você quer exibir são latitude e longitude, tente:

char[9] slatitude = "";
char[9] slongitude = "";

Serial.println( sprintf(slatitude,"%3.5f",latitude) );

Serial.println( sprintf(slongitude,"%3.5f",longitude) );

Vai preencher com 3 inteiros e cinco decimais. Mas só vai dar certo se as variáveis realmente tiverem 5 casas decimais, caso contrário irá preencher com zeros.

Oi LM, boa noite,

eu uso assim:

float xpto;

Serial.println (xpto,5);  // imprime cinco casas decimais

ou

Serial.println (xpto,4);  // imprime quatro casas decimais

etc.

Rui

Lucas, esqueça o que eu falei e use a dica do Rui que eu não conhecia.

É muito mais simples. Não precisa dar mil e umas voltas para obter o resultado.

Somente use sprintf se você quer formatar também a parte inteira.

Bom dia Pessoal.

Antes de mais nada muito obrigado pelo retorno de vocês. Porém não funciona pelo Serial.println porque estou concatenando as duas variáveis em uma String, por exemplo:

String posicao = "";

posicao += latitude;

posicao += ",";

posicao += longitude;

Serial.println(posicao);

Desta forma, a latitude e a longitude são exibidas apenas com 2 casas decimais.

Teria alguma forma de ajustar o número de casas antes de concatenar a latitude e a longitude na String?

Desde já agradeço pela atenção.

latitude e longitude são variáveis float?

Caso positivo, acrescente o seguinte código e substitua no seu exemplo latitude por slatitude:

char[9] slatitude = "";

char[9] slongitude = "";

sprintf(slatitude,"%3.5f",latitude) ;

sprintf(slongitude,"%3.5f",longitude) ;

String posicao = "";

posicao += slatitude;

posicao += ",";

posicao += slongitude;

Serial.println(posicao);

Caso sprintf não funcione (pode aparecer um ? no lugar, me avise que existe uma alternativa.

No sprintf ficou aparecendo ?,? no lugar da variável "posicao", como você havia dito ^^

Há alguma forma de consertar isso?

Desde já agradeço pela sua atenção.

Use dtostrf: Onde 9 é o tamanho máximo e 5 é o número de casas decimais. As variáveis continuam as mesmas, só muda a ordem. Você pode mudar os valores do dtostrf de acordo com sua necessidades:

char[9] slatitude = "";

char[9] slongitude = "";

dtostrf(latitude,9,5,slatitude) ;

dtostrf(latitude,9,5,slatitude) ;

String posicao = "";

posicao += slatitude;

posicao += ",";

posicao += slongitude;

Serial.println(posicao);

Outra forma mais simples, se o objetivo é só a impressão, use a dica do Rui, sem concatenação:

Serial.print(latidude,5);

Serial.print(",");

Serial.println(longitude,5);

Olá José,

Eu testei como você me disse:

char slatitude[9] = "";
char slongitude[9] = "";

dtostrf(latitude,9,5,slatitude);
dtostrf(longitude,9,5,slongitude);


String posicao = "";

posicao += slatitude;
posicao += ",";
posicao += slongitude;

Porém o problema é que desta vez ele só está exibindo a longitude, por exemplo: ",-44,00000" e a latitude ele deixa em branco. Já quebrei a cabeça e testei de diversas maneiras mas não sei qual é o problema de não exibir a latitude na String.

Eu não posso exibir os dados da forma que o Rui falou porque eu uso a String posicao para comparar depois, e desta forma não teria como armazenar a posição com as casas decimais.

Deu certo agora :D

Estava testando diferentes situações, e deu certo quando declarei o vetor de char com tamanho 15. Não entendi porque deu certo, mas mostrou a latitude e longitude certinho!!

O trecho do código então ficou assim:

char slatitude[15] = "";
char slongitude[15] = "";

String posicao = "";

dtostrf(latitude,9,5,slatitude);
dtostrf(longitude,9,5,slongitude);
posicao += slatitude;
posicao += ",";
posicao += slongitude;

Serial.println(posicao);

Gostaria de agrader a você pela sua atenção e paciência para me ajudar a resolver este problema :D

Brigadão Jose, grande abraço.

Qualquer coisa estamos aí.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço