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

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

现在更新手机控制的部分

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

官网地址:http://www.amarino-toolkit.net/

把下面两个下到手机上 安装

打开软件:

点击Monitoring

可以发送字符 跟上一篇PC端用串口工具发送一样的效果。

长按蓝牙设备

选择show events,

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

利用这些数据 我们就可以得到手机当前的状态,从而我们可以根据手机的姿态控制小车的前进后退左转右转

贴出来以下代码,供大家参考 这是没有加入PWM调速的   只要有姿态变化都是全速的

  1. /*
  2. Name:liu_l
  3. Date:04.03
  4. ID:A AmarinoService:send to Arduino:A-0.31603462;0.49799395;12.421119 enter:0x0d 都是8位数字
  5. */
  6. char accelBuff[]; //定义接收数组用来存放手机发送的加速度传感器参数
  7. int accelDot[]; //存放数据中的小数点位于accelBuff中的位置,小数点的十六进制为2e
  8. int accelSemi; //存放数据中的分号位于accelBuff中的位置,分号的十六进制为3b
  9.  
  10. int i;
  11.  
  12. void setup()
  13. {
  14. Serial.begin();
  15. pinMode(, OUTPUT); //M1
  16. pinMode(, OUTPUT); //E1
  17. pinMode(, OUTPUT); //E2
  18. pinMode(, OUTPUT); //M2
  19. }
  20.  
  21. void loop()
  22. {
  23. //接收数据
  24. if(Serial.available())
  25. {
  26. accelBuff[] = Serial.read(); //read
  27. //amarino发送的数据包含一个标志A
  28. if(accelBuff[] == 'A')
  29. {
  30. //开始接收数据,数据以0x13结束
  31. i=;
  32. while()
  33. {
  34. if(Serial.available())
  35. {
  36. accelBuff[i] = Serial.read(); //read
  37. if(accelBuff[i] == 0x13)
  38. break;
  39. else
  40. i++;
  41. }
  42. }
  43. //一直接收数据,直到接收数据结束
  44. }
  45.  
  46. //获取接收数据中分号的位置
  47. for(i = ; i < ; i++)
  48. {
  49. if(accelBuff[i] == 0x3b)
  50. {
  51. accelSemi= i;
  52. break;
  53. }
  54. }
  55.  
  56. //获取接收数据中小数点的位置
  57. for(i = ;i < ;i++)
  58. {
  59. if(accelBuff[i] == 0x2e) //小数点
  60. {
  61. accelDot[]= i; //小数点位置
  62. break;
  63. }
  64. }
  65.  
  66. for(i = accelSemi;i < ;i++) //从第一个分号位置开始,去找第二个小数点位置
  67. {
  68. if(accelBuff[i] == 0x2e)
  69. {
  70. accelDot[]= i;
  71. break;
  72. }
  73. }
  74.  
  75. ////////////////////////////////
  76. //根据接收到的数据控制小车的运动
  77. ////////////////////////////////
  78.  
  79. //首先让小车停止
  80. digitalWrite(, HIGH);
  81. digitalWrite(, HIGH);
  82. digitalWrite(, HIGH);
  83. digitalWrite(, HIGH);
  84. Serial.println("STOP");
  85.  
  86. //通过X轴数据的正负判端前进还是后退 当数据为十位数的时候才行动
  87. if(accelBuff[] == '-') //手机前倾 小车向前走 A-0.31603462;0.49799395;12.421119
  88. {
  89. if(accelDot[] == || (accelBuff[]-0X30) > ) //A-12.3 小数点在第四位(说明X参数为两位整数) 或者 数据第一位本身大于1(0的acsii码为0x30)
  90. {
  91. Serial.println("forward");
  92. digitalWrite(, HIGH);
  93. digitalWrite(, LOW);
  94. digitalWrite(, HIGH);
  95. digitalWrite(, LOW);
  96. }
  97. }
  98. else
  99. {
  100. if(accelDot[] == || (accelBuff[]-0X30) > )
  101. {
  102. Serial.println("back");
  103. digitalWrite(, LOW);
  104. digitalWrite(, HIGH);
  105. digitalWrite(, LOW);
  106. digitalWrite(, HIGH);
  107. }
  108. }
  109.  
  110. //通过Y轴数据的正负判断左转还是右转
  111. ///////////////////////////////////////////////////// A-0.31603462;0.49799395;12.421119
  112. if(accelBuff[accelSemi+] == '-') // ;-23.5
  113. {
  114. if(accelDot[] == accelSemi+ || (accelBuff[accelSemi+]-0X30) > ) //如果 第二个小数点的位置等于=第一个分号+4,如上面假设的-23.5 或者是Y加速度值的第一位本身就大于1
  115. {
  116. Serial.println("left");
  117. digitalWrite(, HIGH);
  118. digitalWrite(, LOW);
  119. digitalWrite(, HIGH);
  120. digitalWrite(, HIGH);
  121. }
  122. }
  123. else
  124. {
  125. if(accelDot[] == accelSemi+ || (accelBuff[accelSemi+]-0X30) > )
  126. {
  127.  
  128. Serial.println("right");
  129. digitalWrite(, HIGH);
  130. digitalWrite(, HIGH);
  131. digitalWrite(, HIGH);
  132. digitalWrite(, LOW);
  133. }
  134. }
  135. }
  136. }

蓝牙遥控小车设计(三)——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. WCF身份验证二:基于消息安全模式的自定义身份验证

    使用X509证书进行身份验证应该说是WCF安全模型中最”正常”的做法, 因为WCF强制要求使用证书加密身份数据, 离开了证书, 所有的身份验证机制拒绝工作, WCF支持的身份验证机制也相当复杂, 这里 ...

  2. Java中动态代理实现原理深究

    一.前言 笔者平时开发使用“动态代理”不多,最近在看设计模式的时候,“动态代理”又在面前晃了几次,所以这次想从源码的角度去分析动态代理的实现原理,以窥探其精妙~ 二.正文 2.1 静态代理  本文源码 ...

  3. Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips

    Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips 来源:https://www.servethehome.com ...

  4. 【题解】SDOI2008莎拉公主的困惑

    挺有趣的恩:洛谷P2155 在纸上打打草稿,写出n!个数,从先往后,遇到不互质的就筛掉——发现一个奇妙的性质!:筛掉的次数.顺序好像是周期性出现的呢~ 而且更加妙妙的是,好像还是m!一轮..那么因为n ...

  5. [CF1066C]Books Queries

    题目大意:维护一个数列,要求在左边插入一个数,在右边插入一个数,查询一个数的排名 题解:可以双指针,开个数组存每个数的位置 卡点:无 C++ Code: #include <cstdio> ...

  6. BZOJ1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 【筛法】

    题目 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号奶牛与1号奶牛相邻 ...

  7. 移动端弹窗滚动时window窗体也一起滚动的解决办法

    在做移动端项目的时候发现,如果弹窗的内容很多很长,在滑动弹窗时,蒙层下面的window窗体也会跟着一起滚动,这样带来很差的视觉体验:当时也想了很多办法,比如判断滑动的元素,如果是弹窗里面的元素则禁止w ...

  8. 【BZOJ 2553】[BeiJing2011]禁忌 AC自动机+期望概率dp

    我一开始想的是倒着来,发现太屎,后来想到了一种神奇的方法——我们带着一个既有期望又有概率的矩阵,偶数(2*id)代表期望,奇数(2*id+1)代表概率,初始答案矩阵一列,1的位置为1(起点为0),工具 ...

  9. clear:both其实是有瑕疵的

    在开发中,从美工MM给你Html代码中,肯定能经常看"<div style="clear:both;"></div>"这样的代码,但是你 ...

  10. cookie中的path与domain属性详解

    1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net.而跨域访问,如域A为t1 ...