Подтвердить что ты не робот

Последовательный порт Delphi XE5 на Android

Кто-нибудь знает, как получить доступ к последовательному порту в android с помощью delphi XE5? Я использую Cubieboard с Android 4.1.

4b9b3361

Ответ 1

Я успешно использовал Winsoft ComPort для Android для последовательной связи USB.

http://www.winsoft.sk/acomport.htm

Проверьте код.

unit Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.Memo, Winsoft.Android.ComPort;

type
  TFormMain = class(TForm)
    Memo: TMemo;
    StatusBar: TStatusBar;
    ToolBar: TToolBar;
    ButtonOpenClose: TButton;
    ButtonSettings: TButton;
    LabelStatus: TLabel;
    AComPort: TAComPort;
    Timer: TTimer;
    procedure ButtonOpenCloseClick(Sender: TObject);
    procedure AComPortAfterWrite(Sender: TObject; Buffer: Pointer;
      Length: Integer);
    procedure TimerTimer(Sender: TObject);
    procedure AComPortAfterRead(Sender: TObject; Buffer: Pointer;
      Length: Integer);
    procedure MemoKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure AComPortError(ComPort: TAComPort; E: EComError;
      var Action: TComAction);
    procedure ButtonSettingsClick(Sender: TObject);
  private
    { Private declarations }
    FReadCount: Integer;
    FWriteCount: Integer;
    procedure UpdateStatus;
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

uses Settings;

{$R *.fmx}

procedure TFormMain.UpdateStatus;
begin
  LabelStatus.Text := 'Read bytes: ' + IntToStr(FReadCount) + '     Write bytes: ' + IntToStr(FWriteCount);
end;

procedure TFormMain.AComPortAfterRead(Sender: TObject; Buffer: Pointer; Length: Integer);
begin
  FReadCount := FReadCount + Length;
  UpdateStatus;
end;

procedure TFormMain.AComPortAfterWrite(Sender: TObject; Buffer: Pointer; Length: Integer);
begin
  FWriteCount := FWriteCount + Length;
  UpdateStatus;
end;

procedure TFormMain.AComPortError(ComPort: TAComPort; E: EComError; var Action: TComAction);
begin
  ShowMessage('Error ' + IntToStr(E.ErrorCode) + ': ' + E.Message);
  Action := caAbort;
end;

procedure TFormMain.ButtonOpenCloseClick(Sender: TObject);
begin
  AComPort.Active := not AComPort.Active;
  Timer.Enabled := AComPort.Active;
  Memo.Enabled := AComPort.Active;
  ButtonSettings.Enabled := not AComPort.Active;
  if AComPort.Active then
    ButtonOpenClose.Text := 'Close'
  else
    ButtonOpenClose.Text := 'Open';
end;

procedure TFormMain.ButtonSettingsClick(Sender: TObject);
begin
  FormSettings.Show;
end;

procedure TFormMain.MemoKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  AComPort.WriteByte(Ord(KeyChar));
end;

procedure TFormMain.TimerTimer(Sender: TObject);
var Text: string;
begin
  Text := AComPort.ReadUtf8;
  if Text <> '' then
    Memo.Text := Memo.Text + Text;
end;

end.

В свойствах компонента вы должны включить основные характеристики, которые создают связь по последовательному порту.

Например: имя устройства, данные, бит, четность и стоповые биты, например.

enter image description here