Fórum Delphi não sabe fazer conta? #284468
13/06/2005
0
Tenho 2 sensores distantes a 0.5m, pego a diferença de tempo gasta para efetuar o trecho(calculando este pequeno trecho como aceleração zero) para calcular a velocidade, então tenho
Velocidade = (distanciaentresensores /(temponosensor2-temponosensor1)) * 3.6
isto forneceria a velocidade em km/h, porém quando faço a conta na calculadora ele me fornece a velocidade correta, mas quando mando o delphi calcular obtenho um número maluco.
ex: velocidade = (0.5 / 0,010) * 3.6 ->considerando a distância entre sensores de 0.5m e o tempo de 100 milésimos de segundo o que a calculadora me fornece 180km/h, porém com as mesmas contas o delphi me fornece 15552000 km/h.
Alguém sabe explicar o porquê disto?
Edilcimar
Curtir tópico
+ 0Posts
13/06/2005
Massuda
Com relação ao cálculo feito pelo Delphi, teria como postar o código que você está usando (incluindo os tipos das variáveis)?
Gostei + 0
13/06/2005
Edilcimar
Gostei + 0
13/06/2005
Marco Salles
é claro que se colocar no delphi os valores corretos ele ira fazer a conta correta.. Porque não iria faze-lo... :?: :?: :?:
se os dois sensores não estiverem bem sincronizados , qualquer leitura errada é um desastre :cry: :cry: :cry:
Porque que voce não tarabalha com a função GetTickCount , se não me engano retorna valores ate em milisegundos
//Api do windows --->> Permite a sincronização .. Ao fim do processo podemos //medir qual o tempo gasto na operação t := GetTickCount;
Gostei + 0
13/06/2005
Edilcimar
Try
Tempo2 := EncodeTime(0,StrToInt(Copy(MaskEdit9.Text,1,2)),StrToInt(Copy(MaskEdit9.Text,4,2)),StrToInt(Copy(MaskEdit9.Text,7,3)));
Except
ShowMessage(´ESTE NÃO É UM TEMPO VÁLIDO´+#13+10+
´PREENCHA TODO O CAMPO, COM´+13+10+
´ZEROS À ESQUERDA SE NECESSÁRIO´+13+10+
´NO FORMATO ESCRITO EM VERMELHO´);
MaskEdit9.SetFocus;
End;
If TempoMeio > 0 then
Begin
VelocidadeMeio := (Sensor1 / (Tempo2 - TempoMeio)) * 3.6;
MaskEdit7.Text := FloatToStrF(VelocidadeMeio, ffFixed,5,2);
End;
este princípio é utilizado em todos maskedit onde são entrados os tempos
Gostei + 0
13/06/2005
Marco Salles
pessoa entra com o tempo encontrado para o programa calcular
e qual são os valores que a pessoa esta entrando para o tempo2 e o tempoMeio e velocidademeio
e como esta a msacara do maskedits
e como voce definiu o tipo dessas variáveis
so para fazer um teste aqui
Gostei + 0
13/06/2005
Massuda
Para um valor de 10 ms, EncodeTime retorna algo como 1,5x10e-7.
Para obter o tempo em segundos, multiplique o resultado de EncodeTime por 24*60*60.
Gostei + 0
13/06/2005
Marco Salles
o valor retornado por EncodeTime é um TTime.. Porque voce disse quu que esta em dias , se le não passa de 1
so quando
var Valor:TTime; begin Valor:=encodeTime(23,59,59,59); showmessage(FloatToStr(valor));end; //ou showmessage(timeToStr(valor));end;
Ele se aproxima de 1....
Gostei + 0
13/06/2005
Edilcimar
Gostei + 0
13/06/2005
Marco Salles
pode ate ter dado certo... mas que retorna em dias.. HA , isto eu to duvidando.. :cry: :cry: :cry: :cry:
[b:9c93b1a633]Com eu disse anteriromente , o valor não passa de um...[/b:9c93b1a633]
tanto que não retorna em dias , que se testar o codigo abaixo:
var Tempo:TTime; begin Tempo:=EncodeTime(23,59,59,59); showmessage(FloatToStr(tempo)); showmessage(TimeToStr(tempo)); showmessage(DateTimeToStr(tempo)); end;
:arrow: sera a velha e conhecida data 30/12/1899...
eu acho , que o problema estava na sua conta , onde voce teria que fazer a conta levando em conta so o milesegundo , voce levava em conta a Hora toda....
Gostei + 0
13/06/2005
Edilcimar
Gostei + 0
13/06/2005
Marco Salles
Gostei + 0
13/06/2005
Edilcimar
Gostei + 0
13/06/2005
Massuda
A interpretação do TDateTime depende do que está medindo... se for uma data, é o total de dias decorridos desde 30/12/1899 12:00:00.
Se você quiser encarar de outra forma, pode pensar que o valor retornado por EncodeTime é a hora expressa como sendo uma fração de um dia.
Gostei + 0
13/06/2005
Edilcimar
Gostei + 0
13/06/2005
Massuda
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)