基于51单片机的蓝牙小车手机端遥控的简单实现 (下篇)
2018-01-06 22:25
267 查看
这个是蓝牙小车的下篇,上篇的地址为:http://blog.csdn.net/lpstudy/article/details/78992038。
源代码:
https://github.com/lpstudy/bluetooth-car
此帖子为昨天发的帖子http://bbs.elecfans.com/jishu_544143_1_1.html的后续版本,昨天已经实现了小车前进,后退,拐弯,获取小车信息,获取帮助等功能了。
昨天的程序有一个明显的问题,手机端按下前进按键后,小车会前进一段时间(命令可配置,上一篇文章中初始化配置为1000ms)。如果把时间调的很短,例如100ms,那么我们的手机端按键必须以小于100ms的间隔进行连续按键,才可以推动小车连续前进,而事实上,我们是达不到那么快的频率触发按键的。 这主要原因是我使用的蓝牙串口调试助手并没有带有按住按键,连续发送命令的功能。 它没有,我可以写呀。
今天花了一个上午,找到了一份android自带的蓝牙聊天源代码,其工程名字为bluetoothChat。 阅读了一下它的代码,然后加上我想要的按钮功能,给按钮加上按住连续命令的功能。当前我设置的是按住不丢以50ms的间隔连续发送命令。小车端设置的每一次按键的执行时间延迟为130ms。原来小车端使用100ms,手机端按住前进按键,小车的轮子运行10几秒大约有一两次停顿(按道理不应该,应为50ms远小于100ms了,但是估计由于蓝牙发送的,接收处理中间有一些突然的阻塞,导致问题),于是调整为新的130ms,这样手机端按住按键的时候,小车可以连续驱动,没有发现一点停顿。
今天主要说说手机端的代码(单片机端的代码就将100ms修改为130ms,其他没有作任何改动)
手机端使用的蓝牙demo工程: BluetoothChat
关于蓝牙搜索周边连接的代码,我一点没动
关于蓝牙通信的那一块代码,我一点没有动
主要修改了界面代码,以及按钮时间代码
界面代码中删除了旧的聊天的列表适配器,加入了新的按钮,新的EditText给按钮增加了事件,同时需要完成按住按钮连续自动发送命令的功能。
手机端寻找小车的HC05设备的界面如下:
手机端控制小车运动的简单的界面如下:
5个按钮用来控制小车的运转,下面的信息按钮用来向小车发送获取信息命令,小车将当前的状态反馈回来,并显示到“收到的数据”那个EditText中。 帮助按钮用来向小车发送帮助命令,小车返回其支持的命令列表,避免以后忘记了命令操作。下面的send按钮中也可以手动发送命令,而不是通过按钮发送,也就是说按钮发送的是定死的命令,下面的send可以发送任意的字符串。
关于连续发送命令的代码,使用的网上的一个代码,自己做了封装,此函数需要传递按钮的id,标题,以及要发送的消息
它就可以在用户按下按键不丢的时候,以每隔50ms的间隔发送message到小车端的蓝牙。
源代码:
https://github.com/lpstudy/bluetooth-car
此帖子为昨天发的帖子http://bbs.elecfans.com/jishu_544143_1_1.html的后续版本,昨天已经实现了小车前进,后退,拐弯,获取小车信息,获取帮助等功能了。
昨天的程序有一个明显的问题,手机端按下前进按键后,小车会前进一段时间(命令可配置,上一篇文章中初始化配置为1000ms)。如果把时间调的很短,例如100ms,那么我们的手机端按键必须以小于100ms的间隔进行连续按键,才可以推动小车连续前进,而事实上,我们是达不到那么快的频率触发按键的。 这主要原因是我使用的蓝牙串口调试助手并没有带有按住按键,连续发送命令的功能。 它没有,我可以写呀。
今天花了一个上午,找到了一份android自带的蓝牙聊天源代码,其工程名字为bluetoothChat。 阅读了一下它的代码,然后加上我想要的按钮功能,给按钮加上按住连续命令的功能。当前我设置的是按住不丢以50ms的间隔连续发送命令。小车端设置的每一次按键的执行时间延迟为130ms。原来小车端使用100ms,手机端按住前进按键,小车的轮子运行10几秒大约有一两次停顿(按道理不应该,应为50ms远小于100ms了,但是估计由于蓝牙发送的,接收处理中间有一些突然的阻塞,导致问题),于是调整为新的130ms,这样手机端按住按键的时候,小车可以连续驱动,没有发现一点停顿。
今天主要说说手机端的代码(单片机端的代码就将100ms修改为130ms,其他没有作任何改动)
手机端使用的蓝牙demo工程: BluetoothChat
关于蓝牙搜索周边连接的代码,我一点没动
关于蓝牙通信的那一块代码,我一点没有动
主要修改了界面代码,以及按钮时间代码
界面代码中删除了旧的聊天的列表适配器,加入了新的按钮,新的EditText给按钮增加了事件,同时需要完成按住按钮连续自动发送命令的功能。
手机端寻找小车的HC05设备的界面如下:
手机端控制小车运动的简单的界面如下:
5个按钮用来控制小车的运转,下面的信息按钮用来向小车发送获取信息命令,小车将当前的状态反馈回来,并显示到“收到的数据”那个EditText中。 帮助按钮用来向小车发送帮助命令,小车返回其支持的命令列表,避免以后忘记了命令操作。下面的send按钮中也可以手动发送命令,而不是通过按钮发送,也就是说按钮发送的是定死的命令,下面的send可以发送任意的字符串。
关于连续发送命令的代码,使用的网上的一个代码,自己做了封装,此函数需要传递按钮的id,标题,以及要发送的消息
它就可以在用户按下按键不丢的时候,以每隔50ms的间隔发送message到小车端的蓝牙。
public void bindMutiplePressedButtonWithMessage(int buttonId, String title, final String message) { Button frontButton = (Button) findViewById(buttonId); frontButton.setText(title); frontButton.setOnTouchListener(new OnTouchListener(){ boolean longClicked = true; @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { longClicked = true; Thread t = new Thread(){ @Override public void run(){ super.run(); while(longClicked) { // Send the name of the connected device back to the UI Activity Message msg = mHandler.obtainMessage(BluetoothChat.MESSAGE_TOSEND); msg.obj = message; mHandler.sendMessage(msg); try{ Thread.sleep(50); }catch(InterruptedException e){ e.printStackTrace(); } } } }; t.start(); } else if(event.getAction() == MotionEvent.ACTION_UP) { longClicked = false; } return true; } }); }
相关文章推荐
- 基于51单片机智能小车的设计与实现
- 基于51单片机的蓝牙控制小车的简单实现(有源代码,无图) (上篇)
- 基于51单片机和蓝牙控制的红外小车
- 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
- 教你不用编程,设计一个Android蓝牙遥控小车软件
- 基于Python的CGIHTTPServer简单的交互实现
- python基于mysql实现的简单队列以及跨进程锁实例详解
- 基于web的QQ实现代码(asp) ——在网叶(web)上实现简单QQ功能(转)
- 100行代码实现最简单的基于FFMPEG+SDL的视频播放器
- 基于zookeeper简单实现分布式锁
- Android实现简单的蓝牙聊天功能
- 基于 java 的 Web Service 简单实现
- 基于struts的权限控制——简单实现
- 基于android系统实现的简单定位功能
- MATLAB学习之路(一) 实现简单的基于欧式距离的新型聚类算法(Clustering by fast search and find of density peaksd)
- 基于lame对mp3进行分割的简单实现
- 配置与实现简单的基于Axis的Web Service
- 基于c++11的100行实现简单线程池
- 简单的RBAC基于角色的用户权限的实现
- 基于Sockt 服务器端简单实现