Warum nicht gleich beim Einlesen/Sammeln zusammenrechnen und nur noch die 180 speichern?
Delphi-Quellcode:
type
TMessdaten = class
Daten: array of Byte;
Zaehler: Integer;
Rechnung: Integer;
procedure Start;
procedure NeuerWert(X: Byte);
procedure Ende;
end;
procedure TMessdaten.Start;
begin
Daten := nil;
Zaehler := 0;
Rechnung := 0;
end;
procedure TMessdaten.NeuerWert(X: Byte);
var
i: Integer;
begin
Inc(Zaehler);
Inc(Rechnung, X);
if Zaehler = 100 then begin
i := Length(Daten);
SetLength(Daten, i + 1);
Daten[i] := Rechnung / 100;
if Daten[i] > 0.7 then Daten[i] := 1
else if Daten[i] < 0.3 then Daten[i] := 0;
Zaehler := 0;
Rechnung := 0;
end;
end;
procedure TMessdaten.Ende;
var
i: Integer;
begin
if Zaehler <> 0 then begin
i := Length(Daten);
SetLength(Daten, i + 1);
Daten[i] := Rechnung / Zaehler;
if Daten[i] > 0.7 then Daten[i] := 1
else if Daten[i] < 0.3 then Daten[i] := 0;
Zaehler := 0;
Rechnung := 0;
end;
end;
bzw.
Delphi-Quellcode:
procedure TMessdaten.NeuerWert(X: Boolean);
var
i: Integer;
begin
Inc(Zaehler);
if X then Inc(Rechnung);
Aber alle 10ms sind in einem so komplexem System schon recht viel gewollt.
Ich hoffe es müssen nicht genau 10ms sein, sondern können auch mal 20 sein
Eventuell noch das Array optimieren, also vorher setzen und dann nur noch ausfüllen.