藍芽電子秤
# PinToo之藍芽電子秤
# 1. 說明
範例採用藍芽通訊協議,讀取電子秤並控制電子秤的去皮清零操作。手機端發送讀取指令,電子秤返回稱重重量的資訊;手機端發送去皮與置零的指令,電子秤端執行相應的操作。在使用該功能前需要將設備與電子秤進行藍芽配對連線。對應的PIN以及藍芽的MAC地址可以在電子秤的產品說明中檢視。
範例使用到的電子秤為耀華XK3190-A12+E,其秤頭的外觀如下圖所示。該型號的電子秤可提供藍芽連線的支援。在使用範例前,請先確認是否已與電子秤進行過藍芽配對,否則會導致範例運行失敗。
通過範例學習,可以掌握fxBlueTooth相關控制元件的使用,並讀取寫入藍芽電子秤的數據。
# 2. 設計明細
開啟PinToo設計器,分別加入下插圖之控制元件。或者點選左上角的[打開模板Lib檔案]
選擇模板檔案來打開對應模板。
①:TfxImage元件,控制元件名稱為fxImageSearch
。
②:TfxText元件,控制元件名稱為fxTextPilled
。
③:TfxText元件,控制元件名稱為fxTextStatus
。
④:TfxText元件,控制元件名稱為fxTextWeight
。
⑤:TfxSwitchButton元件,控制元件名稱為fxSwitchButtonWeight
。
⑥:TfxImage元件,控制元件名稱為fxImageConnect
。
⑦:TfxBluetooth元件,控制元件名稱為fxBluetooth1
。
⑧:TfxText元件,控制元件名稱為fxTextZero
。
fxRunFrame屬性設定
Height
:設定頁面高度=800
。Width
:設定頁面寬度=400
。
fxComboBox屬性設定
Visible
:設定控制元件是否可見=True
。Name
:設定控制元件名稱=fxComboBox
。
fxComboBoxService屬性設定
Visible
:設定控制元件是否可見=True
。Name
:設定控制元件名稱=fxComboBoxService
。
fxTimer屬性設定
Enabled
:是否啟用計數功能,此處設定為False
。
①fxImageSearch屬性設定
Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=40
。Name
:設定控制元件名稱=fxImageSearch
。WarpMode
:設定影象在控制元件中顯示的模式,設定為Fit
,即影象適應于控制元件大小。Bitmap
:設定顯示的圖片,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
②fxTextPilled屬性設定
Text
:設定顯示文字=去皮
。Height
:設定控制元件高度=80
。Width
:設定控制元件寬度=80
。Name
:設定控制元件名稱=fxTextPilled
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=24
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
③fxTextStatus屬性設定
Text
:設定顯示文字=等待連線
。Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=280
。Name
:設定控制元件名稱=fxTextStatus
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=18
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
④fxTextWeight屬性設定
Text
:設定顯示文字=35.200
。Height
:設定控制元件高度=70
。Width
:設定控制元件寬度=220
。Name
:設定控制元件名稱=fxTextWeight
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=64
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
⑤fxSwitchButtonWeight屬性設定
Height
:設定控制元件高度=200
。Width
:設定控制元件寬度=200
。Name
:設定控制元件名稱=fxSwitchButtonWeight
。SwitchOffBmp
:設定開關狀態為關時顯示的影象,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
SwitchOnBmp
:設定開關狀態為開時顯示的影象,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
⑥fxImageConnect屬性設定
Height
:設定控制元件高度=40
。Width
:設定控制元件寬度=40
。Name
:設定控制元件名稱=fxImageConnect
。WarpMode
:設定影象在控制元件中顯示的模式,設定為Fit
,即影象適應于控制元件大小。Bitmap
:設定顯示的圖片,雙擊該屬性或者點選屬性右側的[...]
打開影象編輯器。點選[Load...]
打開資源管理器,選擇所需的圖片後點擊[打開]
,選擇的影象會顯示在預覽框中。可在該頁面下進行裁切或者縮放畫素以使影象與控制元件的寬度高度相適應,修改完成後點選[OK]
按鈕完成影象修改。
⑧fxTextZero屬性設定
Text
:設定顯示文字=置零
。Height
:設定控制元件高度=80
。Width
:設定控制元件寬度=80
。Name
:設定控制元件名稱=fxTextZero
。TextSettings
:設定文字字型的相關資訊。設定Font.Size
=24
。FontColor
=White
。HorzAlign
:設定文字在控制元件中的水平位置=Center
。VertAlign
:設定文字在控制元件中的垂直位置=Center
。
# 3. 程式設計
點選程式設計界面右下角的按鈕,切換至單元選擇界面,勾選需要使用的單元。該程式需要引用 BlueTooth
,BlueToothComponents
,ufxBlueTooth
單元。
# 3.1. 程式初始設定
窗體關閉前關閉藍芽連線。
Procedure fxRunFrameBeforeClose(Sender: TObject);
//關閉窗體前關閉藍芽以及電子秤的連線
Begin
fxBluetooth.CloseServerSocket;
fxBluetooth.FreeClientSocket;
End;
2
3
4
5
6
# 3.2. 事件設定
- ①fxImageSearch-OnClick事件
點選以載入藍芽設備列表。
Procedure fxImageSearchOnClick(Sender: TObject);
//點選搜索按鈕尋找藍芽設備
Begin
fxBluetooth.PairedDevices;
if fxBlueTooth.BTPaireds.Text = '' Then
begin
fxTextStatus.Text := '請檢查藍芽是否已配對';
Exit;
End;
fxComboBox.Items := fxBlueTooth.BTPaireds;
fxComboBox.DropDown;
End;
2
3
4
5
6
7
8
9
10
11
12
- fxComboBox-OnChange事件
點選切換藍芽設備。
Procedure fxComboBoxOnChange(Sender: TObject);
Begin
fxBlueTooth.PairedDevice := fxComboBox.Items[fxComboBox.ItemIndex];
fxTextStatus.Text := '已選擇電子秤 ' + fxComboBox.Items[fxComboBox.ItemIndex];
End;
2
3
4
5
- ⑥fxImageConnect-OnClick事件
點選打開對應設備的藍芽服務列表。
Procedure fxImageConnectOnClick(Sender: TObject);
//選擇服務連線
Begin
fxBluetooth.Services;
fxComboBoxService.Items := fxBluetooth.BTServices;
fxComboBoxService.DropDown;
End;
2
3
4
5
6
7
- fxComboBoxService-OnChange事件
點選切換藍芽設備服務。
Procedure fxComboBoxServiceOnChange(Sender: TObject);
//更改服務
Begin
fxBluetooth.ServiceUUID := fxComboBoxService.Items[fxComboBoxService.ItemIndex];
fxBluetooth.CreateServerSocket;
fxTextStatus.Text := '電子秤連線,已連線藍芽服務';
End;
2
3
4
5
6
7
- ⑤fxSwitchButtonWeight-OnSwitch事件
點選切換計時器開關。
Procedure fxSwitchButtonWeightOnSwitch(Sender: TObject);
//切換讀取與非讀取狀態
Begin
fxTimer1.Enabled := fxSwitchButtonWeight.IsChecked;
End;
2
3
4
5
- fxTimer1-OnTimer事件
計時器定時發送讀取命令並讀取。
Procedure fxTimer1OnTimer(Sender: TObject);
//連續讀取
Begin
fxBluetooth.SendData('R');
fxBluetooth.ReadData;
End;
2
3
4
5
6
- ②fxTextPilled-OnClick事件
點選發送去皮指令操作。
Procedure fxTextPilledOnClick(Sender: TObject);
//去皮
Begin
fxBluetooth.SendData('T');
End;
2
3
4
5
- ⑧fxTextZero-OnClick事件
點選發送置零操作。
Procedure fxTextZeroOnClick(Sender: TObject);
//置零
Begin
fxBluetooth.SendData('Z');
End;
2
3
4
5
- ⑦fxBluetooth-OnReceiveData
當藍芽獲取到數據時,解析數據並顯示。
Procedure fxBluetoothOnReceiveData(Sender: TObject; ServiceName: string; ServiceUUID: string; ReceiveData: string);
//獲取接收資訊,並進行處理以顯示為正確的結果
var
ASymbol,AValue,AStr,FData:string;
Begin
if ReceiveData <> '' Then
begin
FData :=Trim(ReceiveData);
if Copy(FData,1,2) = 'AD' Then
begin
ASymbol:=Copy(FData,3,1);
AStr:=Copy(FData,4,6);
if ASymbol='+' Then
AValue:=StrToFloat(AStr)*0.001
else
AValue:=StrToFloat(AStr)*0.001*-1;
fxTextWeight.Text := FloatToStr(AValue);
end;
end
else
fxTextWeight.Text := '000.0';
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4. 運行結果
使用滑鼠在 PinToo 功能表,點選[儲存至資料庫]
按鈕,將其儲存至資料庫,點選[除錯運行]
確認能夠正常打開。
通過同步中心,將程式上傳至手機PinToo運行;同步時,請確保手機已經運行PinToo,並且已經登陸。
點選藍芽設備按鈕,在彈出的列表中選擇電子秤的藍芽名稱(此處為YaoHuaC66
),點選服務按鈕,等待一段時間后顯示可用的連線服務列表,選擇其中一個發起藍芽連線,待連線建立後點擊下方的電子秤圖示按鈕開啟讀取。可點選[去皮]
、[置零]
按鈕進行去皮和置零的操作。