Hallo liebe Community,
Ich bin gerade dabei ein Programm zu schreiben, welches einen Text an einen Ardunio über einen
Com-Port weiterleitet. Jedoch bin ich auf den bereits in diesem Forum thematisierten SIGSEV-Fehler gestoßen (Zeile 65). Ich komme nicht weiter und würde mich über eine Antwort freuen. Hier der Code:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, Spin, synaser;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ButtonConnect: TButton;
ButtonSend: TButton;
ComboBox1: TComboBox;
ComboBoxPorts: TComboBox;
Edit1: TEdit;
EditTextToSend: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBoxConnection: TGroupBox;
GroupBoxSend: TGroupBox;
LabelTextToSend: TLabel;
Memo1: TMemo;
MemoLog: TMemo;
procedure ButtonConnectClick(Sender: TObject);
procedure ButtonSendClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
connection1: TBlockSerial; // Globale Variable für die serielle Verbindung
connected: boolean; // Verbindungsstatus
port: string; // Gewählter Port
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
portNames: string;
i: integer;
begin
// Liste der verfügbaren seriellen Ports abrufen
portNames := getSerialPortNames;
port := '';
for i := 1 to Length(portNames) do
begin
if portNames[i] = ',' then
begin
ComboBoxPorts.Items.Add(port); //
hier sitzt das Problem
port := '';
end
else
port := port + portNames[i];
end;
ComboBoxPorts.Items.Add(port);
ComboBoxPorts.Text := 'Wähle Port';
connected := False;
end;
procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
if connected then
begin
// Verbindung trennen
connection1.CloseSocket;
connection1.Free;
connected := False;
MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
ButtonConnect.Caption := 'Verbinden';
ComboBoxPorts.Enabled := True;
end
else
begin
if ComboBoxPorts.ItemIndex <> -1 then
begin
port := ComboBoxPorts.Text;
// Verbindung erstellen
connection1 := TBlockSerial.Create;
connection1.Connect(port);
connection1.Config(9600, 8, 'N', SB1, False, False);
MemoLog.Lines.Add('Verbunden mit Port: ' + port);
connected := True;
ButtonConnect.Caption := 'Trennen';
ComboBoxPorts.Enabled := False;
end
else
ShowMessage('Bitte wählen Sie einen Port aus.');
end;
end;
procedure TForm1.ButtonSendClick(Sender: TObject);
var
textToSend: string;
begin
if connected then
begin
textToSend := edit1.text;
if textToSend <> '' then
begin
// Text senden
connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
end
else
ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
end
else
ShowMessage('Es besteht keine Verbindung.');
end;
end.
end; ;
procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
if connected then
begin
// Verbindung trennen
connection1.CloseSocket;
connection1.Free;
connected := False;
MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
ButtonConnect.Caption := 'Verbinden';
ComboBoxPorts.Enabled := True;
end
else
begin
if ComboBoxPorts.ItemIndex <> -1 then
begin
port := ComboBoxPorts.Text;
// Verbindung erstellen
connection1 := TBlockSerial.Create;
connection1.Connect(port);
connection1.Config(9600, 8, 'N', SB1, False, False);
MemoLog.Lines.Add('Verbunden mit Port: ' + port);
connected := True;
ButtonConnect.Caption := 'Trennen';
ComboBoxPorts.Enabled := False;
end
else
ShowMessage('Bitte wählen Sie einen Port aus.');
end;
end;
procedure TForm1.ButtonSendClick(Sender: TObject);
var
textToSend: string;
begin
if connected then
begin
textToSend := edit1.text;
if textToSend <> '' then
begin
// Text senden
connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
end
else
ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
end
else
ShowMessage('Es besteht keine Verbindung.');
end;
end.
end;