关闭

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

标签: android手机蓝牙android studio
7791人阅读 评论(8) 收藏 举报
分类:

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

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

源码托管在地址: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、上面两种方式开始是两个单独的程序,这个程序只是将两种方式融合。
这里写图片描述

3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

智能蓝牙小车 Android蓝牙遥控器源代码

  • 2013-06-19 21:36
  • 599KB
  • 下载

手把手教你做蓝牙小车(二)

遥控车是不是都玩过? 有没想过自己攒一个?
  • anddlecn
  • anddlecn
  • 2016-06-07 14:25
  • 6231

无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)

网站: http://no-cping.com/         很多热衷于玩单片机小车、机器人的童靴,往往也向往着有天能自己编写一个Android手机的遥控程序,通过自己的手机遥控小车,单片机程序用...
  • tidavery
  • tidavery
  • 2012-09-04 19:58
  • 66559

个人项目 小跟班——蓝牙小车控制(UI篇)

个人项目 :蓝牙控制小车(UI篇)
  • ZL_1205
  • ZL_1205
  • 2016-12-30 18:18
  • 597

Android蓝牙开发:蓝牙小车上位机(开源)(第二版)

蓝牙小车重力感应小车上位机
  • leelit
  • leelit
  • 2014-08-17 13:02
  • 4713

手机蓝牙控制小车Android源码

  • 2014-11-26 15:22
  • 2.34MB
  • 下载

基于Android蓝牙控制遥控气

  • 2013-02-17 21:44
  • 599KB
  • 下载

51单片机智能小车C程序 蓝牙遥控+避障+自动寻迹

基于AT89C52的蓝牙小车程序。
  • seven94959
  • seven94959
  • 2017-06-09 14:43
  • 1363

智能蓝牙小车c语言程序

  • 2017-07-13 20:03
  • 3KB
  • 下载

无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)

Block Editor里面各类模块代表的意义: 现在该考虑一下我们的Android软件要怎么运行,列出来需要哪些控件。 向前按钮、向后按钮、向左、向右、………,哦,不要这样吧...
  • tidavery
  • tidavery
  • 2012-09-04 20:13
  • 15517
    个人资料
    • 访问:358815次
    • 积分:3727
    • 等级:
    • 排名:第10101名
    • 原创:96篇
    • 转载:3篇
    • 译文:2篇
    • 评论:84条
    文章分类
    最新评论