蓝牙遥控小车设计(三)——Amarino和 Android手机重力感应控制
最近事真是多啊,一件接着一件的,加上自己拖延症~ - -!
遥控小车基本完成了,只是自己没时间来更新。
现在更新手机控制的部分
首先我们要熟悉一个软件——
官网地址:http://www.amarino-toolkit.net/
把下面两个下到手机上 安装

打开软件:

点击Monitoring

可以发送字符 跟上一篇PC端用串口工具发送一样的效果。
长按蓝牙设备

选择show events,


这是加速度传感器发送给arduino的数据

利用这些数据 我们就可以得到手机当前的状态,从而我们可以根据手机的姿态控制小车的前进后退左转右转
贴出来以下代码,供大家参考 这是没有加入PWM调速的 只要有姿态变化都是全速的
/*
Name:liu_l
Date:04.03
ID:A AmarinoService:send to Arduino:A-0.31603462;0.49799395;12.421119 enter:0x0d 都是8位数字
*/
char accelBuff[]; //定义接收数组用来存放手机发送的加速度传感器参数
int accelDot[]; //存放数据中的小数点位于accelBuff中的位置,小数点的十六进制为2e
int accelSemi; //存放数据中的分号位于accelBuff中的位置,分号的十六进制为3b int i; void setup()
{
Serial.begin();
pinMode(, OUTPUT); //M1
pinMode(, OUTPUT); //E1
pinMode(, OUTPUT); //E2
pinMode(, OUTPUT); //M2
} void loop()
{
//接收数据
if(Serial.available())
{
accelBuff[] = Serial.read(); //read
//amarino发送的数据包含一个标志A
if(accelBuff[] == 'A')
{
//开始接收数据,数据以0x13结束
i=;
while()
{
if(Serial.available())
{
accelBuff[i] = Serial.read(); //read
if(accelBuff[i] == 0x13)
break;
else
i++;
}
}
//一直接收数据,直到接收数据结束
} //获取接收数据中分号的位置
for(i = ; i < ; i++)
{
if(accelBuff[i] == 0x3b)
{
accelSemi= i;
break;
}
} //获取接收数据中小数点的位置
for(i = ;i < ;i++)
{
if(accelBuff[i] == 0x2e) //小数点
{
accelDot[]= i; //小数点位置
break;
}
} for(i = accelSemi;i < ;i++) //从第一个分号位置开始,去找第二个小数点位置
{
if(accelBuff[i] == 0x2e)
{
accelDot[]= i;
break;
}
} ////////////////////////////////
//根据接收到的数据控制小车的运动
//////////////////////////////// //首先让小车停止
digitalWrite(, HIGH);
digitalWrite(, HIGH);
digitalWrite(, HIGH);
digitalWrite(, HIGH);
Serial.println("STOP"); //通过X轴数据的正负判端前进还是后退 当数据为十位数的时候才行动
if(accelBuff[] == '-') //手机前倾 小车向前走 A-0.31603462;0.49799395;12.421119
{
if(accelDot[] == || (accelBuff[]-0X30) > ) //A-12.3 小数点在第四位(说明X参数为两位整数) 或者 数据第一位本身大于1(0的acsii码为0x30)
{
Serial.println("forward");
digitalWrite(, HIGH);
digitalWrite(, LOW);
digitalWrite(, HIGH);
digitalWrite(, LOW);
}
}
else
{
if(accelDot[] == || (accelBuff[]-0X30) > )
{
Serial.println("back");
digitalWrite(, LOW);
digitalWrite(, HIGH);
digitalWrite(, LOW);
digitalWrite(, HIGH);
}
} //通过Y轴数据的正负判断左转还是右转
///////////////////////////////////////////////////// A-0.31603462;0.49799395;12.421119
if(accelBuff[accelSemi+] == '-') // ;-23.5
{
if(accelDot[] == accelSemi+ || (accelBuff[accelSemi+]-0X30) > ) //如果 第二个小数点的位置等于=第一个分号+4,如上面假设的-23.5 或者是Y加速度值的第一位本身就大于1
{
Serial.println("left");
digitalWrite(, HIGH);
digitalWrite(, LOW);
digitalWrite(, HIGH);
digitalWrite(, HIGH);
}
}
else
{
if(accelDot[] == accelSemi+ || (accelBuff[accelSemi+]-0X30) > )
{ Serial.println("right");
digitalWrite(, HIGH);
digitalWrite(, HIGH);
digitalWrite(, HIGH);
digitalWrite(, LOW);
}
}
}
}
蓝牙遥控小车设计(三)——Amarino和 Android手机重力感应控制的更多相关文章
- 蓝牙遥控小车设计(四)——Android APP遥控
最近都没心情写博客,忙着答辩论文之类的,唉,主要是愁工作啊...... 先上车体全景图: APP截图: 上最终视频:
- Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino UNO板 https://item.t ...
- 单片机与android手机通信(控制LED小灯亮灭)
1.单片机实验板功能设计 为验证数据通信内容,让单片机板上的四个按键与android手机客户端上的四个LED灯相互控制:为达到上述基本实验要求,采用单字符传输数据即可,硬件需设计两块相同的单片机电路板 ...
- android 利用重力感应监听 来电时翻转手机后静音。
在CallNotifier.java中 加入如下代码: public void GetSensorManager(Context context) { sm = (SensorManager) ...
- Unity3D学习笔记——Android重力感应控制小球
一:准备资源 两张贴图:地图和小球贴图. 二:导入资源 在Assets下建立resources文件夹,然后将贴图导入. 三:建立场景游戏对象 1.建立灯光: 2.创建一个相机,配置默认. 3.建立一个 ...
- Android手机音量的控制
1.AudioManager audio=(AudioManager) super.getSystemService(Context.AUDIO_SERVICE);//获得手机的声音服务 //设置加音 ...
- android小游戏模版—重力感应
好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...
- Fiddler抓取Android手机网络数据包
也许你也有疑问,如果开发没有完备的接口文档,我如何知道他API的信息? 这时我们就得通过一些抓包工具抓取这些API信息. 常见抓包工具 HTTP抓包工具:Fiddler.Charles.Firebug ...
- Android互动设计-蓝牙遥控自走车iTank
一.让Android与外部的设备互动 iTank智能型移动平台基本款简介 iTank智能型移动平台是一台履带车,车体上方的控制板有一颗微处理器,我们可以通过它的UART或是I2C接口下达指令来控制iT ...
随机推荐
- PS制作圆角透明图片
方法一:利用“魔术棒橡皮工具”. 1. 点击“圆角矩形工具”,然后选中打开的背景图片,选中即可. 2.然后,按住“ctrl+enter”,所选边框变为虚线框,然后点击“ctrl+shift+i”反选( ...
- Linux杂技
挂载光盘 mkdir /mnt/cdrom #建立挂载点 mount /dev/cdrom /mnt/cdrom/ #挂载光盘 更换YUM源: cd /etc/yum.repos.d/ 使网络yum源 ...
- [C/C++] C++常见面试题
参考:http://blog.csdn.net/shihui512/article/details/9092439 1.new.delete.malloc.free之间的关系 malloc和free都 ...
- 【bzoj4619】[Wf2016]Swap Space 贪心
题目描述 你有许多电脑,它们的硬盘用不同的文件系统储存数据.你想要通过格式化来统一文件系统.格式化硬盘可能使它的容量发生变化.为了格式化,你需要买额外的硬盘.当然,你想要买容量最小的额外储存设备以便省 ...
- Topcoder SRM579 1000pts
石头剪刀布QAQ 一看是个很油的概率dp 首先一看你很快能得出状态的表示F[i][r][p][s] 然后只要考虑r,p,s出现的次数来进行概率dp就好了 具体实现的时候细节很多(少) 如果预处理一下组 ...
- jsp电子商务 购物车实现之一 设计篇
购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- 解决Vue方法中setTimeout改变变量的值无效
把data里的变量继承过来重新封装一下 let that = this; this.rightAnswer = false; setTimeout(function() { that.rightAns ...
- Mysql History list length 值太大引起的问题
1. 环境 Mysql 主从 Mysql版本:5.1.49-log 系统:Red Hat Enterprise Linux Server release 5.4 64bit 2. 表面现象 数据库操 ...
- Terminals Project
https://github.com/Terminals-Origin Terminals Project Terminals is a secure, multi tab terminal serv ...