Dividindo uma string recebida pela porta serial em duas variáveis float

Boa tarde pessoal...

 

Estou com um problema no meu TCC e gostaria de uma ajuda se possível.

 

Estou recebendo pela porta serial o valor de duas variáveis lidas do simulador de vôo Flightgear da seguinte forma:

 

Alt:154,6CRm:125,4

 

Sendo uma várial Alt: com valor de 154,6 e a outra variável CRm: com valor de 125,4

 

Preciso separar o valor 154,6 da primeira variável do valor da segunda de 125,4 e transformá-las em variáveis do tipo float, pois preciso usar esses valores em um PID.

 

O que preciso saber é como separar e transformar em float esses dados obtidos da serial.

 

Obrigado.

Exibições: 949

Responder esta

Respostas a este tópico

Marcelo,

Boa tarde, tudo bem?

Os valores tem posição fixa? Quer dizer, serão sempre com 5 dígitos, separados pelo CRm?

Se tiver jeito, leve o seu projeto lá no Parque prá gente dar uma olhada...

[],

Prof. Mauro Assis

Boa tarde professor,

Na verdade não é fixo mas posso delimitar a quantidade de dígitos depois da vírgula através do protocolo de comunicação xml que faz a interface do arduino com o Flightgear.

Que horas começam as atividades lá no parque amanhã ?

Marcelo,

Eu chego cedo, 7:30. É bom se vc for cedo, pq aí dá para te dar mais atenção.

Até,

Ok, chegarei o mais cedo possível !

Muito Obrigado.

//Este foi feito agora,mas não foi testado.

//Pode ser posto no procedimento de click de botão no delphi,lazarus

//o procedimento de captura de serial deve ser trabalhada

//poe no uses strutils  {unidade pascal para manipulação de strings}

Var Div_tag,Div_val,Bufer:tstringlist;

       campo:string;

       Valor:real;

        i:integer;

Begin

//cria bufer

bufer:=tstringlist.create;

bufer.delimiter:=char('-');

//cria arquivo de saida

Div_valor:=tstringlist.create;

//joga as strings de entrada no buffer

bufer.text:=string('Alt:154,6CRm:125,4');  {variaveis que vem da serial}

bufer.text:=stringreplace(bufer.text,'CRm','-CRm',[rfreplaceall]);//acrescenta o hifen no texto separando

bufer.delimitedtext:=bufer.text;//separa em duas linhas

Div_tag:=tstringlist.create;Div_tag.delimiter:=char(':');// dois pontos

for i:=0 to bufer.count-1 do

begin

Div_tag.delimitedtext:=bufer.strings[i];//pega cada linha do bufer

//campo

campo:=Div_tag.strings[0];//primeira tag

Valor:=strtofloat(Div_tag.strings[1]);// tranforma valor string em float (real)

Div_valor.add('Sou um nome de campo:'+campo);//string

Div_valor.add('Sou um valor transformado em string novamente'+floattostr(valor));

end;

Div_valor.savetofile('arquivo_salvo.txt');

Showmessage('Processo concluído com êxito !');

Div_valor.free;

Div_tag.free;

bufer.free;

End;

//Deus,saúde,paz de Yehovah

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço