Transfer data classic bluetooth bersifat half duplex (satu arah dalam satu waktu) namun terlihat full duplex karena kecepatannya. Dalam beberapa kasus/contoh penggunaan aplikasi android seringkali proses ReadData/ReceiveData/pembacaan bluetooth, memaksa bluetooth dalam kondisi ‘penerima’/client terus menerus sehingga tidak ada/kecil waktu yang tersedia bagi proses sendData/kirim.
Pada software Rad Studio (Delphi) khususnya target android, disediakan fungsi readdata() dan receivedata(), yang apabila dijalankan tanpa parameter maka secara default akan menahan modul bluetooth (HC-05) dalam posisi penerima selama waktu setting timeout, baik pada metode thread atau timer hal ini menyebabkan proses write/kirim harus menunggu hingga jalur komunikasi mode receive selesai.
Untuk memberikan kesempatan lebih untuk proses baca, seharusnya proses terima data bluetooth dibuat tidak terlalu lama karena dalam RX/TX android sendiri ada mekanisme buffer sebagai tampungan data yang masuk.
Berikut ini adalah contoh pemograman APK Android menggunakan Rad Studio untuk kirim/terima data bluetoth klasik:
procedure TForm1.ButtonLedOnClick(Sender: TObject);
begin
if LSockect.Connected then
begin
LSockect.SendData(TEncoding.UTF8.GetBytes('@'));
end;
end;
procedure TForm1.ButtonLedOffClick(Sender: TObject);
begin
if LSockect.Connected then
begin
LSockect.SendData(TEncoding.UTF8.GetBytes('#'));
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
buffer : TBytes;
dataString : String;
I: Integer;
begin
if (LSockect <> nil) and (LSockect.Connected) then
begin
buffer := LSockect.ReceiveData(100);
if Length(buffer) > 0 then
begin
Insert(buffer, bufferBluetooth, Length(bufferBluetooth));
dataString := TEncoding.UTF8.GetString(bufferBluetooth);
if dataString.Contains(#13#10) then
begin
LabelData.Text := dataString;
SetLength(bufferBluetooth, 0);
end;
end;
end;
end;
Skema modul hc-05 bluetooth dengan arduino sebagai client:

Sedangkan contoh/sampel koding arduino untuk berkomunikasi dengan apk android berbasis delphi (rad studio):
#define led1Pin 7
#include <SPI.h>
#include <SoftwareSerial.h>
SoftwareSerial serialBluetooth(2, 3); // RX, TX
uint32_t kirimMillis;
int counter = 0;
void setup() {
pinMode(led1Pin, OUTPUT);
Serial.begin(9600);
Serial.println(F("Aplikasi android koneksi classic bluetooth HC-05 dengan RAD Studio (Delphi)"));
Serial.println(F("https://www.semesin.com/project"));
Serial.println();
serialBluetooth.begin(9600);
}
void loop() {
if (serialBluetooth.available()) {
char c = serialBluetooth.read();
Serial.print(c);
if (c == '@') {
digitalWrite(led1Pin, HIGH);
Serial.println(" : Led on");
}
else if (c == '#') {
digitalWrite(led1Pin, LOW);
Serial.println(" : Led off");
}
}
if (kirimMillis < millis()) {
kirimMillis = millis() + 1000;
serialBluetooth.println(counter);
counter++;
}
}
Link koding aplikasi android dengan rad studio serta koding arduino: