蓝牙小车控制——二维坐标控制
给定一个方格地图,建立平面二维坐标,手机通过屏幕的坐标图,选定对应的坐标,通过蓝牙数据传输,为小车提供数据支持。
- 坐标图:
- 上位机界面
通过触屏获取界面的坐标值,进行数据处理后,发送出去。
界面简介:
- 控件:分为三个,分别是“打开蓝牙”、“搜索设备”、“发送消息”。其中“发送消息”是为了检验蓝牙串口通信是否正常,我这里是每点击一次发送一次“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的意思,想转换成整型数据,做个转换即可。
完整代码连接