Once setting up the synaser we are ready to add a TTimer in our project that :
1) Gets the code (GetCode)
2) Validates the parsed code (IsValidCode)
3) Parses the status from the code (ParseStatus)
4) Prints the code into the screen (PrintStatusInLabel)
//The timer !
procedure TFormMain.TimerTimer(Sender: TObject);
var y:double;
begin
Application.ProcessMessages;
GetCode();
StatusBar.Panels.Items[1].Text := 'Code : ' + PrintCode();
if IsValidCode then begin
StatusBar.Panels.Items[1].Text := StatusBar.Panels.Items[1].Text + ' [valid]';
ParseStatus();
LabelScreen.Caption := PrintStatusInLabel();
end else begin
StatusBar.Panels.Items[1].Text := StatusBar.Panels.Items[1].Text + ' [invalid]';
end;
FormMain.Refresh;
//Close the timer and disconnect if IsConnected is false
if not IsConnected then begin
Timer.Enabled:=false;
Disconnect();
end;
end;
The on connect / disconnect event is a OnClick TButton event.
We simply enable or disable the TTimer.
Notice that disabling the timer on this event can cause errors since the timer can be doing a reading operation.
So we set the global variable IsConnected to false and then in the TTimer event (worker) on a "secure zone" makes the disconnection.
This is a classic threading error for young players. Threads will be discussed in another series of lessons.
Right now look it this way : TTimer does a readingĀ job.
Only TTimer knows when is done with the reading so i (external event) will simply inform the TTimer to disconnect when he finishes his reading and he can securely disconnect.
//On connect disconnect
procedure TFormMain.ButtonConnectDisconnectClick(Sender: TObject);
begin
//Connect
if ButtonConnectDisconnect.Caption = 'Connect' then begin
Connect(EditPort.Text); //Connect at the port ...
if IsConnected then begin
ButtonConnectDisconnect.Caption:='Disconnect';
Timer.Interval:=SpinEditEveryXMs.Value;
Timer.Enabled:=true;
end;
//Disconnect
end else if ButtonConnectDisconnect.Caption = 'Disconnect' then begin
IsConnected := false; //this must stop the timer securely
ButtonConnectDisconnect.Caption:='Connect';
end;
end;
The print status in label can be something like that :
function TFormMain.PrintStatusInLabel():string;
var stemp:string;
begin
if My_Multimeter.Status.IsRS232 = true then
stemp += ' [RS233] ';
if My_Multimeter.Status.IsAuto = true then
stemp += ' [AUTO] ';
if My_Multimeter.Status.AC_DC_None = AC then
stemp += ' [AC] '
else if My_Multimeter.Status.AC_DC_None = DC then
stemp += ' [DC] ';
stemp += My_Multimeter.Status.ValuePrefix + ' ' + My_Multimeter.Status.UnitPrefix + My_Multimeter.Status.UnitValue;
stemp += #13#10; //Break line
if My_Multimeter.Status.IsDiode = true then
stemp += ' DIODE ';
if My_Multimeter.Status.IsSound = true then
stemp += ' SOUND ';
if My_Multimeter.Status.IsHold = true then
stemp += ' HOLD ';
if My_Multimeter.Status.IsRelative = true then
stemp += ' REL ';
if My_Multimeter.Status.IsBattery = true then
stemp += ' BAT ';
result := stemp;
end;
At this point you should be able to get the readings on your screen (LabelScreen.Caption)
Of course once reading the values you can store them into a ListView / csv file.
You can use your dedicated functions in order to do this job.
This step is really easy to do and it is not explained in this article.
In the next page we will see the plot graph.