藍芽電子秤
# Smart之藍芽電子秤
# 1. 說明
範例採用藍芽通訊協議,讀取電子秤並控制電子秤的去皮清零操作。PC端發送讀取指令,電子秤返回稱重重量的資訊;PC端發送去皮與置零的指令,電子秤端執行相應的操作。在使用該功能前需要將設備與電子秤進行藍芽配對連線。對應的PIN以及藍芽的MAC地址可以在電子秤的產品說明中檢視。
範例使用到的電子秤為耀華XK3190-A12+E,其秤頭的外觀如下圖所示。該型號的電子秤可提供藍芽連線的支援。在使用範例前,請先確認計算機是否支援藍芽,是否已與電子秤進行藍芽配對連線,否則會導致範例運行失敗。
# 2. 設計明細
開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]-[打開專案]
選擇範例專案檔案來打開該範例。
①:TLabel元件,控制元件名稱為Label1
。
②:TImage元件,控制元件名稱為Image1
。
③:TBluetooth元件,控制元件名稱為Bluetooth1
。
④:TImage元件,控制元件名稱為ImageDevice
。
⑤:TLabel元件,控制元件名稱為Label2
。
⑥:TComboBox元件,控制元件名稱為ComboBoxPaired
。
⑦:TTimer元件,控制元件名稱為Timer1
。
⑧:TImage元件,控制元件名稱為Image2
。
⑨:TWidgetLCDLabel元件,控制元件名稱為WidgetLCDLabel1
。
⑩:TImage元件,控制元件名稱為ImageServices
。
(11):TImage元件,控制元件名稱為ImageSheer
。
(12):TImage元件,控制元件名稱為ImageZero
。
(13):TComboBox元件,控制元件名稱為ComboBoxServices
。
Main主窗體設定
BorderStyle
:設定窗體樣式型別=bsDialog
。Caption
:設定窗體標題=藍芽電子秤
。ClientHeight
:設定窗體客戶區高度=504
。ClientWidth
:設定窗體客戶區寬度=635
。
①Label1屬性設定
Caption
:設定顯示的字幕內容=藍芽電子秤
。Font
:設定字型。雙擊該屬性或者點選屬性右側的[...]
打開字型設定界面。
②Image1屬性設定
Align
:設定對齊方式=alClient
。Stretch
:設定圖片拉伸=True
。Picture
:設定圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
④ImageDevice屬性設定
Height
:設定控制元件的高度=31
。Width
:設定控制元件的寬度=31
。Stretch
:設定圖片拉伸=True
。Name
:設定控制元件名稱=ImageDevice
。Picture
:設定顯示的圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
⑤Label2屬性設定
Caption
:設定顯示的字幕內容=藍芽電子秤
。Font
:設定字型。雙擊該屬性或者點選屬性右側的[...]
打開字型設定界面。
⑥ComboBoxPaired屬性設定
Name
:設定控制元件名稱=ComboBoxPaired
。Font
:設定字型。雙擊該屬性或者點選屬性右側的[...]
打開字型設定界面。
⑦Timer1屬性設定
Enabled
:是否啟用計時器=False
。Interval
:設定計時器觸發的時間間隔=2000
。
⑧Image2屬性設定
Height
:設定控制元件的高度=417
。Width
:設定控制元件的寬度=624
。Stretch
:設定圖片拉伸=True
。Picture
:設定顯示的圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
⑨WidgetLCDLabel屬性設定
Height
:控制元件高度,設定為130
。Width
:控制元件寬度,設定為308
。Fill.Kind
:設定填充樣式=gfkSolid
。Caption.FillOff.Color
:設定未顯示區域的數值顏色=clBlack
。Caption.Format
:設定預設顯示的數值格式型別=000.00
。
⑩ImageServices屬性設定
Height
:設定控制元件的高度=31
。Width
:設定控制元件的寬度=31
。Stretch
:設定圖片拉伸=True
。Name
:設定控制元件名稱=ImageServices
。Picture
:設定顯示的圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
(11)ImageSheer屬性設定
Height
:設定控制元件的高度=30
。Width
:設定控制元件的寬度=32
。
(12)ImageZero屬性設定
Height
:設定控制元件的高度=30
。Width
:設定控制元件的寬度=32
。
(13)ComboBoxServices屬性設定
Name
:設定控制元件名稱=ComboBoxServices
。Font
:設定字型。雙擊該屬性或者點選屬性右側的[...]
打開字型設定界面。
# 3. 程式設計
# 3.1. 程式初始設定
該程式無初始設定。
# 3.2. 事件設定
- ④ImageDevice-OnClick事件
點選設備藍芽的按鈕,列出目前已配對的藍芽設備列表。
procedure TMyHandler.ImageDevicesClick;
//點選載入配對設備列表
begin
FThis.Bluetooth1.PairedDevices;
FThis.ComboboxPaired.Items := FThis.Bluetooth1.BTPaireds;
FThis.ComboBoxPaired.DroppedDown := True;
FThis.ImageDevices.Enabled := False;
end;
2
3
4
5
6
7
8
- ⑩ImageServices-OnClick事件
點選設備服務按鈕,列出選擇設備可用的藍芽服務。
procedure TMyHandler.ImageSevicesClick;
//點選載入服務至列表
begin
FThis.Bluetooth1.Services;
FThis.ComboBoxServices.Items := FThis.Bluetooth1.BTServices;
FThis.ComboBoxServices.DroppedDown := True;
end;
2
3
4
5
6
7
- ⑥ComboBoxPaired-OnChange事件
將配對設備的名稱填入藍芽控制元件的設備屬性中。
procedure TMyHandler.ComboBoxPairedChange;
//切換設備
begin
FThis.Bluetooth1.PairedDevice := FThis.ComboBoxPaired.Items[FThis.ComboBoxPaired.ItemIndex];
end;
2
3
4
5
- (13)ComboBoxServices-OnChange事件
點選以切換藍芽服務。
procedure TMyHandler.ComboBoxServicesChange;
//切換服務
begin
FThis.Timer1.Enabled := False;
FThis.Bluetooth1.CloseServerSocket;
FThis.Bluetooth1.FreeClientSocket;
if FThis.Bluetooth1.PairedDevice = '' then
begin
ShowMessage('未選擇配對設備!');
exit;
end;
FThis.Bluetooth1.ServiceUUID := FThis.Bluetooth1.BTServices[FThis.ComboBoxServices.ItemIndex];
FThis.Bluetooth1.CreateServerSocket;
FThis.Timer1.Enabled := True;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- ⑦Timer1-OnTimer事件
計時器觸發事件,讀取讀數。
procedure TMyHandler.Timer1Timer;
//定時讀取
begin
FThis.Bluetooth1.SendData('R');
FThis.Bluetooth1.ReadData;
end;
2
3
4
5
6
- ③Bluetooth1-OnReceiveData事件
獲取數值並解析顯示。
procedure TMyHandler.Bluetooth1ReceiveData;
//接收數據並顯示
//獲取接收資訊,並進行處理以顯示為正確的結果
var
ASymbol,AStr,FData:string;
AValue: Double;
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);
FThis.WidgetLCDLabel1.Caption.Value := AValue;
end;
end
else
FThis.WidgetLCDLabel1.Caption.Value := 0;
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (11)ImageSheer-OnClick事件
點選執行去皮操作。
procedure TMyHandler.ImageSheerClick;
//去皮
begin
FThis.Bluetooth1.SendData('T');
FThis.Bluetooth1.ReadData;
end;
2
3
4
5
6
- (12)ImageZero-OnClick事件
點選執行清零操作。
procedure TMyHandler.ImageZeroClick;
//置零
begin
FThis.Bluetooth1.SendData('Z');
FThis.Bluetooth1.ReadData;
end;
2
3
4
5
6
# 4. 運行結果
通過工具欄儲存,將程式儲存為 sdb 專案檔案。
使用滑鼠點選工具欄運行(Run),測試運行結果。程式啟動后,點選藍芽圖示,右側下拉框顯示配對的藍芽設備列表,點選選擇。然後點選服務圖示按鈕,右側下拉框顯示目前設備可用的服務,點選選擇以建立連線,此時可以獲取到讀數資訊,點選[去皮]
、[置零]
按鈕可對電子秤進行去皮和置零操作。