In this code, the debug Breakpoint in timer, never increase, after click on button?!
Unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
ButtonStart: TButton;
Label1: TLabel;
Memo1: TMemo;
Timer1: TTimer;
procedure ButtonStartClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
FSerialFile: Text;
FPortOpen: Boolean;
FDevice: string;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
function MakePrintable(const S: string): string;
var i: Integer;
begin
Result := '';
for i := 1 to Length(S) do
if S[i] in [#32..#126, #10, #13] then
Result := Result + S[i]
else
Result := Result + '.'; // ersetzt ungültige Bytes
end;
function ToHex(const S: string): string;
var i: Integer;
begin
Result := '';
for i := 1 to Length(S) do
Result := Result + IntToHex(Ord(S[i]), 2) + ' ';
end;
procedure TForm1.ButtonStartClick(Sender: TObject);
begin
Memo1.Lines.Add('Hallo Welt');
label1.Caption:='test';
ButtonStart.caption:='test';
sleep(500);
FDevice := '/dev/ttyUSB0';
// Seriellen Port öffnen
AssignFile(FSerialFile, FDevice);
{$I-}
Reset(FSerialFile);
{$I+}
if IOResult <> 0 then
begin
ShowMessage('Fehler: Konnte ' + FDevice + ' nicht öffnen.');
Exit;
end;
FPortOpen := True;
Timer1.Interval := 100; // 100 ms Intervall
Timer1.Enabled := True;
Memo1.Lines.Add('Port ' + FDevice + ' geöffnet, lese kontinuierlich...');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Line: string;
begin
ButtonStart.caption:='123';
if FPortOpen then
begin
{$I-}
ButtonStart.caption:='123';
while not Eof(FSerialFile) do
begin
Readln(FSerialFile, Line);
line:='123';
Memo1.Lines.Add(tohex(Line)); // oder ToHex(Line)
Memo1.Lines.Add(Line);
Memo1.SelStart := Memo1.GetTextLen; // automatisch nach unten scrollen
end;
{$I+}
if IOResult <> 0 then
begin
Memo1.Lines.Add('Fehler beim Lesen.');
Timer1.Enabled := False;
FPortOpen := False;
CloseFile(FSerialFile);
end;
end;
end;
end.