安卓手机蓝牙控制智能小车 android程序设计

项目名称: 安卓手机控制智能小车

本文主要介绍手机端程序设计

源码托管在地址:github.com/cyang812/Bluetooth_Car

开发平台 :win10;
开发软件:Android Studio 2.1

在开发的过程中,软件版本有过几次更新,本文重点讲述更新逻辑及实现过程。

一、Bluetooth_Demo(通过按钮控制)

1、这是最早开发的版本,通过连接蓝牙后,可实现通过按钮(Button)控制小车运动。
2、主要代码:
Version 1.0
监听按钮的点击事件

……
public void onClick(View v){
       switch (v.getId()){
            case R.id.imagebutton1:
                message[0]= (byte) 0x41;//设置要发送的数值
                vibrator();//振动器
                Toast.makeText(this,"前进",Toast.LENGTH_SHORT).show();
                bluesend(message);//发送数值
                Log.d("cy08",""+message[0]);
                break;

            case R.id.imagebutton2:
                message[0]= (byte) 0x44;
                vibrator();
                Toast.makeText(this,"左转",Toast.LENGTH_SHORT).show();
                bluesend(message);
                Log.d("cy08",""+message[0]);
                break;
……

Version 1.0 Bug
点击前进后,便会不停向前,直到接受到下一个控制信号。其他按钮也是如此,这样小车运行就没办法停止
这个问题的原因是,从手机程序的角度说,点击一个按钮后,程序判断这个按钮的意图,例如前进,则发送一个预设的数值,比如 ‘A’,当然这需要转换成ASCII码值,并采用十六进制发送,具体会在蓝牙通信原理部分讲述。也就是说,点击一次按钮,仅发送一次数据。从单片机程序讲,蓝牙模块接受完一个数据,通过串行口请求中断,单片机根据接收到的数据控制输出,以实现对小车的控制。所以按一个按钮仅发送一个数据的方式实际上就造成了小车运动不灵活,无法停止。

Version 1.1
添加停止按钮

            case R.id.imagebutton5:
                message[0]= (byte) 0x40;
                vibrator();
                Toast.makeText(this,"停止",Toast.LENGTH_SHORT).show();
                bluesend(message);
                Log.d("cy08",""+message[0]);
                break;

这个版本添加停止按钮,通过发送一个不同的数值,蓝牙将该数值传输给单片机后,单片机对电机的输出端变为低电平,之后小车停止运动。
这个按钮实际上解决了问题,只不过在每次想要停止时还要按下按钮不是一种符合交互逻辑的方式。更好的方式应该是按下按钮小车运动,放开按钮小车停止。这也就是 Version 1.2

Version 1.2 部分代码
监听按下和放开的事件

class ButtonListener implements View.OnTouchListener {

        public boolean onTouch(View v, MotionEvent event) {
            switch (v.getId()){
                case R.id.imagebutton1:
                    if(event.getAction() == MotionEvent.ACTION_UP){//放开事件
                        message[0]= (byte) 0x40;//设置要发送的数值
                        bluesend(message);//发送数值
                        Log.d("cy08",""+message[0]);
                    }
                    if(event.getAction() == MotionEvent.ACTION_DOWN){//按下事件
                        message[0]= (byte) 0x41;//设置要发送的数值
                        bluesend(message);//发送数值
                        Log.d("cy08",""+message[0]);
                    }
                    break;

这段代码实现了监听按钮的按下和放开事件。按下和放开发送不同的数值,用以实现不同的控制。按下前进,发送数值,单片机进入中断程序,放开发送新的数值,单片机又一次中断。
这个版本删除了 V1.1中的停止按钮,因为已经不需要了,放开任意按钮就会发送停止运行的数据。

二、Gsensor(通过手机传感器控制)

1、手机调用传感器判断手机方位,通过连接蓝牙后发送数据,控制小车运动。
2、主要代码:
Version 1.0

            if (y < 0 && z < 10) {
                textUp.setText("up");
                message[0]= (byte) 0x41;
                //vibrator();
                Toast.makeText(this,"前进",Toast.LENGTH_SHORT).show();
                bluesend(message);
                Log.d("cy08",""+message[0]);
            } else {
                textUp.setText("wait");
            }

            if (y > 0 && z < 10) {
                textDown.setText("down");
                message[0]= (byte) 0x42;
                //vibrator();
                Toast.makeText(this,"后退",Toast.LENGTH_SHORT).show();
                bluesend(message);
                Log.d("cy08",""+message[0]);
            } else {
                textDown.setText("wait");
            }

首先调用手机内置的加速度传感器,系统会放回三个整形数字,范围为(-10,10),这三个数字分别表示手机XYZ轴三个方向上的加速度分量。
这里写图片描述
我们可以通过判断这三个数值的大小,确定手机的方向,例如,手机平放时这三个数十(0,0,10),而手机前倾时,X分量不变,Y分量小于0,Z分量小于10.
可通过限制这三个分量的大小,判断操作者的意图,并通过蓝牙传输数据,单片机处理数据控制输出。

三、Bluetooth_Car(通过按钮切换以上两种模式)

1、上面两种方式开始是两个单独的程序,这个程序只是将两种方式融合。
这里写图片描述

评论 22 您还未登录,请先 登录 后发表或查看评论
声明:该设计资料转自lb8820265网友分享,仅供学习参考,不可用于商业用途。 手机遥控蓝牙平衡小车概述: 蓝牙平衡玩具小车,具有的功能有:手机APP虚拟遥感控制模式,自动行走避障模式,碰撞自动后退,倒下自动停止,预警模式,跳舞模式,说话,语音表情,压强播报,温度播报,湿度播报,前方障碍物距离播报,PC上位机无线调参,示波器显示,3D姿态显示。是集趣味性,智能性,易操作性,可研究性于一体的蓝牙平衡小车。 视频演示: 采用的硬件如下: 处理器: Nucleo STM32F411核心板 传感器模块: Nucleo IKS01A1(包括陀螺仪,加速度计,磁力计,温度计,湿度计,压强计) 蓝牙模块: CC2541 蓝牙4.0模块 无线模块: NRF24L01+模块 电机驱动模块: BT6612模块 测距模块: 夏普2Y0A21红外测距模块 舵机: SG90模拟舵机 语音模块: SYN6658语音模块 电池: 狮子11.1V 2200mAh 电源: LM2596电源模块 电机: 诗凯支架自带,3530直流减速电机 光电编码器: 电机自带,13440线每轮转,AB相输出 手机: 魅族MX3 上位机接收端: MSP430G2553核心板 电脑: 这个随意 整个系统的硬件拆解图图下图所示: 整个系统可大致分为4个部分,分别是:小车部分,上位机接收机,PC上位机,安卓手机控制端。 4个部分的关系如下图所示: 其中以平衡小车为中心,能将信息通过无线发送给上位机接收端,上位机接收端再将数据通过串口的形式发送给PC上位机。同时上位机亦可以发送调参与控制指令给上位机接收端,上位机接收端再将信息发送给平衡小车安卓APP也能通过蓝牙传输信息给CC2541模块,将信息通过串口的形式发送给平衡小车进行控制。 编写的软件如下: 小车: 采用IAR7.3编写 上位机接收端: 采用CCS5.1编写 上位机: 采用VC6.0 MFC编写 手机APP: 采用Android studio 1.2.2编写 手机APP 之前的帖子已经讲了,如何实现蓝牙4.0的收发,那么接下来就是通信协议的制定与界面的编辑了, 下图是手机APP的截图: PC上位机端 上位机采用VC6.0编写,PC上位机主要是用来进行参数调整、虚拟示波器显示波形、3D姿态显示。下图是上位机截图。采用MSComm串口控件进行数据的发送与接收。能够进行端口扫描,并连接串口,实现数据发送,错误显示,实现了4个整形数字与4个浮点数的调整,并且能够读取系统的原始数据,显示发送状态,且能够显示信号强弱,同时能够进行示波器显示,调节显示间隔。 由于采用的是NRF24L01+带数据的ACK模式进行数据传输,所以上位机不发送数据的时候,小车并不会发送回来,所以上位机能够掌握显示数据的间隔。示波器采用的IPlot控件,能够实现4个数据波形显示,且能够让任意一组数据显示、实现轴的缩放、在顶端显示数值。3D姿态显示采用的是OpenGL库,画出小车模型,设置为半透明,能实时清晰的显示小车的姿态。 PC上位机示波器显示紧挨着3D姿态显示亲热照! 蓝牙平衡玩具小车全家福!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

cyang812

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值