為Wifi-lot小車做一個(gè)遙控器應(yīng)用
??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??
在HarmonyOS3.0和OpenHarmony3.2的支持下,TCP-socket通信API已經(jīng)穩(wěn)定可控,今天我們做一個(gè)控制應(yīng)用來控制小車。
1、效果演示
2、設(shè)計(jì)思路
運(yùn)行環(huán)境:HarmonyOS3.0,OpenHarmony3.2
(1)按鍵說明
①轉(zhuǎn)向控制:左右滑動(dòng)搖桿,實(shí)現(xiàn)轉(zhuǎn)向,上下滑動(dòng)搖桿,實(shí)現(xiàn)速度控制。
②動(dòng)力控制:上下滑動(dòng)搖桿,實(shí)現(xiàn)前進(jìn)后退。
③本機(jī)IP地址展示
④對端IP地址輸入
⑤鏈接,斷開按鍵,主動(dòng)進(jìn)行TCP連接請求與斷開。
(2)控制指令
本遙控器以狀態(tài)指令為驅(qū)動(dòng),每觸發(fā)一種狀態(tài)僅發(fā)送一次指令,對端在未接收到新指令的情況下一直保持當(dāng)前指令狀態(tài)。
- 前進(jìn)狀態(tài):“1”
- 后退狀態(tài):“2”
- 左轉(zhuǎn)狀態(tài):“3”
- 右轉(zhuǎn)狀態(tài): “4”
- 停止?fàn)顟B(tài): “0”
3、頁面設(shè)計(jì)
在搖桿的拖動(dòng)設(shè)計(jì)中,主要運(yùn)用ontouchmove,ontouchend,ontouchstart實(shí)現(xiàn),通過手指坐標(biāo)來確定搖桿組件的top和left值,通過設(shè)定方向閾值來判斷是否開始發(fā)送指令,通過打印回調(diào)數(shù)據(jù)來設(shè)置參數(shù)。
(1)hml
(2)CSS
4、業(yè)務(wù)邏輯
(1)參數(shù)調(diào)試
我們前面為搖桿組件設(shè)置了ontouch事件,那么如何設(shè)計(jì)Top或者left值來判斷什么時(shí)候可以開始發(fā)送指令呢?搖桿既不可太過靈敏也不可以太過遲鈍,我們可以通過打印觸摸事件返回的參數(shù)來進(jìn)行調(diào)參。
(2)觸摸控制
根據(jù)前文提到的狀態(tài)控制機(jī)制,我們應(yīng)該在ontouchmove中進(jìn)行判斷,當(dāng)上滑到某一閾值的時(shí)候開始發(fā)送前進(jìn)指令,當(dāng)松手時(shí)即ontouchend時(shí)我們應(yīng)該立即發(fā)送停止指令。即滑動(dòng)中判斷并發(fā)送指令,停止則立馬發(fā)送停止信息。具體的閾值參數(shù)根據(jù)個(gè)人考慮進(jìn)行調(diào)試設(shè)置。
(3)TCP
- 通過輸入框獲取對端IP地址,點(diǎn)擊鏈接按鍵時(shí)觸發(fā)connect方法請求連接,連接成功彈出對話框"連接成功"。
- 展示本機(jī)IP地址。
- 應(yīng)用或者頁面銷毀時(shí)應(yīng)關(guān)閉連接,否則會(huì)占據(jù)對端該端口,導(dǎo)致下次連接失敗。
- 根據(jù)狀態(tài)驅(qū)動(dòng)指令控制,由于ontouchmove是一直在觸發(fā)的,也就是判斷是一直在進(jìn)行的,當(dāng)我們保持搖桿前進(jìn)狀態(tài)的時(shí)候,注意要判斷指令狀態(tài)是否更新了?如果指令未變,那么就不再發(fā)送指令。只有指令變化的時(shí)候才會(huì)發(fā)送一次指令。
- 只有連接成功后,才能夠發(fā)送信息。
方法 | 描述 |
creatScoket() | 綁定本機(jī)IP |
sendMessage() | 發(fā)送指令 |
onConnect() | 鏈接對端 |
onDisconnect() | 斷開鏈接 |
getIpAddress() | 獲取本機(jī)IP地址 |
- tcp設(shè)置參數(shù):
|參數(shù)|描述|
|-|-|
|keepAlive|是否保持連接。默認(rèn)為false。|
|OOBInline|是否為OOB內(nèi)聯(lián)。默認(rèn)為false。|
|TCPNoDelay|TCPSocket連接是否無時(shí)延。默認(rèn)為false。|
|receiveBufferSize|接收緩沖區(qū)大?。▎挝唬築yte)|
|sendBufferSize|發(fā)送緩沖區(qū)大?。▎挝唬築yte)|
|reuseAddress|是否重用地址。默認(rèn)為false|
|socketTimeout|套接字超時(shí)時(shí)間,單位毫秒(ms)| - 建議開啟HarmonyOS工程,開發(fā)完畢后可同步安裝到OpenHarmony設(shè)備,反之則會(huì)變得麻煩一些。
(4)申請權(quán)限
5、結(jié)語
本次分享的應(yīng)用需要南北向開發(fā)配合食用,同時(shí)需要HarmonyOS3.0設(shè)備或者OpenHarmony3.2設(shè)備。HarmonyOS2.0設(shè)備可考慮采用JS/JAVA混合開發(fā),JAVA側(cè)實(shí)現(xiàn)Socket通信,可參考我往期博客。下一期,我將會(huì)分享如何配置HarmonyOS3.0設(shè)備的碰一碰拉起應(yīng)用配置。