藍牙小車控制——二維座標控制
給定一個方格地圖,建立平面二維座標,手機通過屏幕的座標圖,選定對應的座標,通過藍牙數據傳輸,爲小車提供數據支持。
- 座標圖:
- 上位機界面
通過觸屏獲取界面的座標值,進行數據處理後,發送出去。
界面簡介:
- 控件:分爲三個,分別是“打開藍牙”、“搜索設備”、“發送消息”。其中“發送消息”是爲了檢驗藍牙串口通信是否正常,我這裏是每點擊一次發送一次“OK”字符串,可在電腦的串口調試助手看到。
- 消息顯示框:上層是表示連接狀態,如果連接成功則顯示“連接成功”,否則“連接失敗”。
- 設備列表欄:當檢測到藍牙設備的時候,可在此處看到,點擊你的藍牙模塊進行連接。
- 座標界面:下方的座標界面是獲取座標值,買個交叉點我都做了特殊處理,當點擊到此範圍,我會將此範圍定義一個特定的值,如下圖
我在(2,4)處點擊,屏幕獲得的座標值爲x=357.57632,y=310.4071。通過多次的取值,定下此區間內的數據爲(2,4)。
具體代碼如下:
private class TouchListenerImp implements View.OnTouchListener {//觸屏獲取座標事件
public boolean onTouch(View v,MotionEvent event){
MainActivity.this.info.setText("x="+event.getX()+" y="+event.getY());
//x判斷
if (event.getX()>130 && event.getX()<180){ x=0;}
else if (event.getX()>290 && event.getX()<340){x=1;}
else if (event.getX()>410 && event.getX()<470){x=2;}
else if (event.getX()>560 && event.getX()<650){x=3;}
else if (event.getX()>700 && event.getX()<790){x=4;}
else if (event.getX()>880 && event.getX()<950){x=5;}
else {x=-1;}
//y判斷
if (event.getY()>900 && event.getY()<950){ y=0;}
else if (event.getY()>740 && event.getY()<800){y=1;}
else if (event.getY()>600 && event.getY()<670){y=2;}
else if (event.getY()>410 && event.getY()<480){y=3;}
else if (event.getY()>280 && event.getY()<340){y=4;}
else if (event.getY()>130 && event.getY()<190){y=5;}
else {y=-1;}
if (x!=-1&&y!=-1){
connectThread.sendMsg(String.valueOf(x)+String.valueOf(y)+"\r\n");//發送座標數據
}
return false;
}
}
注意:定義的此區間是先通過獲取屏幕座標,之後根據這個區間大致的定下,這個視具體情況而定。
爲了數據明顯,我用串口助手進行數據的接受檢測。
注:數據的格式是字符串,比如“24”是x=2,y=4的意思,想轉換成整型數據,做個轉換即可。
完整代碼連接