最近事真是多啊,一件接着一件的,加上自己拖延症~ - -!

遥控小车基本完成了,只是自己没时间来更新。

现在更新手机控制的部分

首先我们要熟悉一个软件——

官网地址: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手机重力感应控制的更多相关文章

  1. 蓝牙遥控小车设计(四)——Android APP遥控

    最近都没心情写博客,忙着答辩论文之类的,唉,主要是愁工作啊...... 先上车体全景图: APP截图: 上最终视频:

  2. Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino UNO板 https://item.t ...

  3. 单片机与android手机通信(控制LED小灯亮灭)

    1.单片机实验板功能设计 为验证数据通信内容,让单片机板上的四个按键与android手机客户端上的四个LED灯相互控制:为达到上述基本实验要求,采用单字符传输数据即可,硬件需设计两块相同的单片机电路板 ...

  4. android 利用重力感应监听 来电时翻转手机后静音。

       在CallNotifier.java中 加入如下代码: public void GetSensorManager(Context context) { sm = (SensorManager) ...

  5. Unity3D学习笔记——Android重力感应控制小球

    一:准备资源 两张贴图:地图和小球贴图. 二:导入资源 在Assets下建立resources文件夹,然后将贴图导入. 三:建立场景游戏对象 1.建立灯光: 2.创建一个相机,配置默认. 3.建立一个 ...

  6. Android手机音量的控制

    1.AudioManager audio=(AudioManager) super.getSystemService(Context.AUDIO_SERVICE);//获得手机的声音服务 //设置加音 ...

  7. android小游戏模版—重力感应

               好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...

  8. Fiddler抓取Android手机网络数据包

    也许你也有疑问,如果开发没有完备的接口文档,我如何知道他API的信息? 这时我们就得通过一些抓包工具抓取这些API信息. 常见抓包工具 HTTP抓包工具:Fiddler.Charles.Firebug ...

  9. Android互动设计-蓝牙遥控自走车iTank

    一.让Android与外部的设备互动 iTank智能型移动平台基本款简介 iTank智能型移动平台是一台履带车,车体上方的控制板有一颗微处理器,我们可以通过它的UART或是I2C接口下达指令来控制iT ...

随机推荐

  1. hbase表的写入

    hbase列式存储给我们画了一个很美好的大饼,好像有了它,很多问题都可以轻易解决.但在实际的使用过程当中,你会发现没有那么简单,至少一些通用的准则要遵守,还需要根据业务的实际特点进行集群的参数调整,不 ...

  2. 全局 Ajax 事件处理器

    jQuery中将Ajax请求和响应分成了若干(5)个阶段 并且允许开发者在Ajax请求和响应的不同阶处理不同的逻辑, 这些方法用于注册事件处理器,用来处理页面上的任何 Ajax 请求,当某些事件触发后 ...

  3. struts标签中的select

    <!-- Struts下拉列表标签: name="deptId" 下拉列表标签的名称(服务器根据这个名称获取选择的项的实际的值value值) headerKey 默认选择项的 ...

  4. 使用HTML5的JavaScript选择器操作页面中的元素

    <!doctype html><html lang="en"> <head>     <meta charset="UTF-8& ...

  5. Android逆向之旅---静态方式分析破解视频编辑应用「Vue」水印问题

    一.故事背景 现在很多人都喜欢玩文艺,特别是我身边的UI们,拍照一分钟修图半小时.就是为了能够在朋友圈显得逼格高,不过的确是挺好看的,修图的软件太多了就不多说了,而且一般都没有水印啥的.相比较短视频有 ...

  6. 安徽师大附中%你赛day4T1 金字塔 解题报告

    金字塔 题目背景: \(Zdrcl\)带着妹子们来到了胡夫金字塔周边旅游, 发现这里正在进行一个有关金字塔的游戏 题目描述: 游戏规则如下: 1. 这里的金字塔是一个 \(N\) 阶的二维金字塔. 2 ...

  7. 【POJ 1201 Intervals】

    Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...

  8. ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法

    最近做手机端项目遇到一个问题,就是在ios10系统里面  safari浏览器 在touchmove 里面写e.preventDefault();不起作用 更种google 还是没有找到解决方法 最后找 ...

  9. SCOI2008奖励关 [状压dp]

    题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...

  10. 生日蛋糕 POJ - 1190

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...