Lazarus i odczyt/wysyłanie z portu com

  • 13 Odpowiedzi
  • 6738 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Emati

  • 44
Lazarus i odczyt/wysyłanie z portu com
« dnia: Sierpień 06, 2009, 00:27:43 »
Może mi ktoś powiedzieć, jak mozna w prosty sposób komunikować się przez wirtualnego coma (bluetooth) za pomocą lazarusa?

*

Offline czarusGG

  • **
  • 236
  • Płeć: Mężczyzna
    • http://www.kowszun.waw.pl
  • Sprzęt: HPC JORNADA 680, WALLABY, HIMALAYA, BLUEANGE
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #1 dnia: Sierpień 06, 2009, 14:21:09 »
Spróbuj może otworzyć plik o nazwie: com1: do odczytu lub pisania :)

procedure Tform1.button1click (sender : tobject);
                 var plk : textfile;
begin
  AssignFile (plk, 'com1:');
  AppendFile (plk);
  WriteLn (plk, 'test');
  closefile (plk);
end;
Trzeba wiedzieć coś o wszystkim i wszystko o czymś.

*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #2 dnia: Sierpień 06, 2009, 16:03:02 »
Niestety, ale kompilator nie wie, co to jest appendfile ;]

procedure TForm1.Button1Click(Sender: TObject);
var
  plik:textfile;
begin
  assignfile(plik,'com6');
  reset (plik);
  writeln(plik,edit1.text);
  closefile(plik);
end;
Po uruchomieniu takiego programu pisze mie, ze nie można znaleźć pliku

*

Offline СП4УБВ

  • *****
  • 1106
  • Płeć: Mężczyzna
  • Sprzęt: Motorola Atrix
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #3 dnia: Sierpień 06, 2009, 17:28:48 »
Potrzebujesz bibliotek takich:

mnStreams, mnCommClasses, mnCommStreams, mnCommThreads

Są do pobrania na stronie lazarusa, jak nie znajdziesz to wpisz tam w szukajce.

A odwołanie się do portu wtedy wygląda tak (przykładowy program do obsługi GPS z ustawianiem portu - jest razem z unitami do pobrania):

unit MainForms;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls,  Dialogs, StdCtrls,
  ExtCtrls, Menus, IniFiles, interfaces,
  mnStreams, mnCommClasses, mnCommStreams, mnCommThreads, GPSUtils, GPSThreads;

type
  { TForm1 }
  TForm1 = class(TForm)
    ConvertBtn1: TButton;
    DecimalEdit: TEdit;
    DMEdit: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    DMLbl: TLabel;
    ListBox1: TListBox;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    PortEdit: TPanel;
    BaudRateEdit: TPanel;
    StartBtn: TButton;
    Label1: TLabel;
    ConvertBtn: TButton;
    StopBtn: TButton;
    GPSTimer: TTimer;
    procedure ConvertBtn1Click(Sender: TObject);
    procedure ConvertBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure GPSTimerTimer(Sender: TObject);
    procedure MemoChange(Sender: TObject);
    procedure MenuItem1Click(Sender: TObject);
    procedure StartBtnClick(Sender: TObject);
    procedure SendTimerTimer(Sender: TObject);
    procedure StopBtnClick(Sender: TObject);
  private
    FCancel: Boolean;
    FCommStream: TmnCommStream;
    FThread : TmnGPSThread;
    procedure CancelThread;
  public

  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.SendTimerTimer(Sender: TObject);
begin
end;

procedure TForm1.StopBtnClick(Sender: TObject);
begin
  CancelThread;
  GPSTimer.Enabled:= False;
end;

procedure TForm1.CancelThread;
begin
  FCancel := True;
  if FThread <> nil then
  begin
    FThread.Terminate;
    FThread := nil;
    FCommStream := nil;
  end;
end;

procedure TForm1.StartBtnClick(Sender: TObject);
begin
  if FThread = nil then
  begin
    FCommStream := TmnCommStream.Create(True, PortEdit.Caption, StrToInt(BaudRateEdit.Caption));
    FCommStream.ReadTimeout := 10;
    FCommStream.ReadTimeoutConst := 100; //or use QueMode
//    FCommStream.QueMode := True;
    FCommStream.ConnectMode := ccmRead;
    FCommStream.Connect;
    FThread := TmnGPSThread.Create(True, FCommStream);
    FThread.EndOfLine := #13;
    FThread.FreeOnTerminate := True;
    FThread.Resume;
  end;
  GPSTimer.Enabled := True;
end;

procedure TForm1.MemoChange(Sender: TObject);
begin

end;

procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CancelThread;
end;

procedure TForm1.GPSTimerTimer(Sender: TObject);
var
  Info:TGPSInfo;
begin
  Info := GPSInfo;
  if Info.Source <> '' then
  begin
    ListBox1.Items.Add(Info.Source);
    ListBox1.Items.Add(GPSToMAP(Info.Decimal));
    ListBox1.ItemIndex := ListBox1.Items.Count - 1;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Application.Terminate;
end;

procedure TForm1.ConvertBtnClick(Sender: TObject);
begin
  DMEdit.Text := GPSDecimalToDM(StrToFloat(DecimalEdit.Text));
end;

procedure TForm1.ConvertBtn1Click(Sender: TObject);
var
  Info :TGPSInfo;
begin
  GPSPrase('$GPGGA,204852.000,4038.0022,N,07401.2578,W,1,6,1.64,31.7,M,-34.3,M,,*5B', Info);
  DecimalEdit.Text := Info.Source;
  DMEdit.Text := GPSToMAP(Info.Decimal);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  IniFile:TIniFile;
begin
  IniFile:=TIniFile.Create(Application.Location + 'Options.ini');
  PortEdit.Caption:=IniFile.ReadString('Options', 'Port', 'COM6');
  BaudRateEdit.Caption:=IniFile.ReadString('Options', 'BaudRate', '4800');
end;

initialization
  {$I MainForms.lrs}
end.


*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #4 dnia: Sierpień 07, 2009, 12:52:52 »
A możesz mi podać dokładniej, gdzie ściągnąć te biblioteki?
Znalazłem temat na ich forum o odczycie danych z gpsa, ale i tak nie wiem, skąd dorwać te biblioteki...

*

Offline СП4УБВ

  • *****
  • 1106
  • Płeć: Mężczyzna
  • Sprzęt: Motorola Atrix
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #5 dnia: Sierpień 07, 2009, 14:02:44 »
Po wpisaniu dowolnej z bibliotek w google, dostajesz link do forum lazarusa, konkretnie do tematu z linkami, uzytkownik zaher7 to wrzucił i to są jego programy.


*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #6 dnia: Sierpień 08, 2009, 22:52:12 »
Hmm, no dobra, możesz mi jeszcze powiedzieć, jak odpalić te jego programy, co tam są na tym forum w lazarusie?
Niestety z lazarusem sobie za bardzo nie radze ;]
« Ostatnia zmiana: Sierpień 09, 2009, 14:33:25 wysłana przez Emati »

*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #7 dnia: Sierpień 10, 2009, 12:04:06 »
To może mi ktoś pomóc?

*

Offline СП4УБВ

  • *****
  • 1106
  • Płeć: Mężczyzna
  • Sprzęt: Motorola Atrix
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #8 dnia: Sierpień 10, 2009, 12:45:17 »
Emati ale jak można Tobie pomóc bardziej? Masz źródła, przykład. Ja się za Ciebie Lazarusa nie nauczę. Reszta to nauka, nauka i nauka. W tym sporo pisania, testów i ciągle nauka.

Natomiast jak masz problem z odpaleniem przykładów - pisz do ich autora, jest szansa, że pomoże.

Dodatkowo masz całkiem obszerne forum lazarusa na stronie lazarusa :P, tam zadawaj pytania.


*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #9 dnia: Sierpień 10, 2009, 18:21:47 »
Chodzi mi o to, że nie wiem po prostu, jak dodać do lazarusa te biblioteki:
mnStreams, mnCommClasses, mnCommStreams, mnCommThreads

*

Offline СП4УБВ

  • *****
  • 1106
  • Płeć: Mężczyzna
  • Sprzęt: Motorola Atrix
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #10 dnia: Sierpień 10, 2009, 20:05:01 »
Tak jak w przykładzie, wystarczy, że dopiszesz do klauzuli uses i dorzucisz pasy do katalogu z programem.

*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #11 dnia: Sierpień 12, 2009, 21:25:37 »
Dobra, albo ja jestem tępy, albo nie wiem, gdzie są te biblioteki...
Możesz mi je wrzucić na forum?
Bo jak przeglądałem tamto forum lazarusa i te linki, to nie znalazłem zadnych bibliotek o tych nazwach...


*

Offline Emati

  • 44
Odp: Lazarus i odczyt/wysyłanie z portu com
« Odpowiedź #13 dnia: Sierpień 13, 2009, 09:53:29 »
Heh, no fakt, wielkie dzięki za pomoc, naprawdę dzięki :)
Teraz chyba sobie już poradzę z tym wszystkim ;]