Por eso comentaba si ademas podes cambiar el estado de una salida cada ves que entra al form que cuenta los pulsos, para asi determinar cada cuanto es que entra, a leer los pulsos,
así determinas si es problema de tiempos entre procesos, algo hay que ir eliminando de la lista, si ves que lee demasiado lento algo debe haber distinto que seguramente no estemos teniendo en cuenta.
Perdoname no te entiendo ...
yo entro al form de calibracion , habilito el timer , y hago esto
procedure TForm5.TimerCaudalCalibraTimer(Sender: TObject);
begin
CaudalCali := Main.GPIO.PinValue[PinCaudal1];
if CaudalCali = TPinValue.Low then CauStateCali :=0 else CauStateCali :=1;
if (CauStateCali <> CauLastStateCali) then
begin
if CaudalCali = TPinValue.High then // Si cambia el estado incremento Caupuscounter
begin
inc(PulsosCali) ; // if the current state is HIGH then the button went from off to on:
EditCalibra.Text:= 'Pulsos ' + IntToStr(PulsosCali) ;
end;
end
else
SystemCore.Delay(30); // rebote caudalimetro
// save the current state as the last state, for next time through the loop
CauLastStateCali := CauStateCali;
end;
Ahi me cuenta perfectamente los pulsos , los 4 de cada vuelta del caudalimetro
El tema es que en el form que me muestra el caudal consumido , si hago un copy paste de esta subrutina , me cuenta la mitad , y no hay muchas diferencias entre forms , estoy mirando variables , lectura de la base de datos , pero no lo veo al problema , es evidente que es un proceso , pero no te entiendo lo que me propones ...
Gracias y disculpa