小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 13831|回复: 15

简单的Android手机重力感应控制蓝牙智能小车机器人源代码

[复制链接]
发表于 2012-7-29 11:20:43 | 显示全部楼层 |阅读模式
  1. package com.AccelerometerDemo.www;import java.io.IOException;
  2. import java.io.OutputStream;
  3. import java.util.List;
  4. import java.util.UUID;
  5. import android.app.Activity;
  6. import android.bluetooth.BluetoothAdapter;
  7. import android.bluetooth.BluetoothDevice;
  8. import android.bluetooth.BluetoothSocket;
  9. import android.content.Context;
  10. import android.graphics.Bitmap;
  11. import android.graphics.BitmapFactory;
  12. import android.graphics.Canvas;
  13. import android.graphics.Color;
  14. import android.graphics.Paint;
  15. import android.hardware.Sensor;
  16. import android.hardware.SensorEvent;
  17. import android.hardware.SensorEventListener;
  18. import android.hardware.SensorManager;
  19. import android.os.Bundle;
  20. import android.util.Log;
  21. import android.view.Gravity;
  22. import android.view.SurfaceHolder;
  23. import android.view.SurfaceView;
  24. import android.widget.Toast;
  25. public class AccelerometerDemo extends Activity implements SensorEventListener{
  26. /** Called when the activity is first created. */
  27. private SensorManager sensorManager;
  28. private MySurfaceView view;
  29. private Object[] accelerometer={
  30. "X轴加速度值:","Y轴加速度值:","Z轴加速度值:",
  31. };
  32. private BluetoothAdapter mBluetoothAdapter = null;
  33. private BluetoothSocket btSocket = null;
  34. private OutputStream outStream = null;
  35. private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  36. private static String address = "00:11:03:21:00:43"; // <==要连接的蓝牙设备MAC地址
  37. @Override
  38. public void onCreate(Bundle savedInstanceState) {
  39. super.onCreate(savedInstanceState);
  40. sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
  41. view=new MySurfaceView(this);
  42. setContentView(view);
  43. mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  44. if (mBluetoothAdapter == null) {
  45. Toast.makeText(this, "蓝牙设备不可用,请打开蓝牙!", Toast.LENGTH_LONG).show();
  46. finish();
  47. return;
  48. }

  49. if (!mBluetoothAdapter.isEnabled()) {
  50. Toast.makeText(this, "请打开蓝牙并重新运行程序!", Toast.LENGTH_LONG).show();
  51. finish();
  52. return;
  53. }
  54. }
  55. @Override
  56. public void onStart() {
  57. super.onStart();
  58. }
  59. @Override
  60. protected void onResume(){
  61. super.onResume();
  62. List<Sensor> sensors=sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
  63. if(sensors.size()>0){
  64. sensorManager.registerListener(this, sensors.get(0),SensorManager.SENSOR_DELAY_FASTEST);
  65. }
  66. DisplayToast("正在尝试连接智能小车,请稍后····");
  67. BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
  68. try {
  69. btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
  70. } catch (IOException e) {
  71. DisplayToast("套接字创建失败!");
  72. }
  73. DisplayToast("成功连接智能小车!可以开始操控了~~~");
  74. mBluetoothAdapter.cancelDiscovery();
  75. try {
  76. btSocket.connect();
  77. DisplayToast("连接成功建立,数据连接打开!");

  78. } catch (IOException e) {
  79. try {
  80. btSocket.close();
  81. } catch (IOException e2) {

  82. DisplayToast("连接没有建立,无法关闭套接字!");
  83. }
  84. }
  85. }

  86. @Override
  87. protected void onPause(){
  88. super.onPause();
  89. sensorManager.unregisterListener(this);
  90. if (outStream != null) {
  91. try {
  92. outStream.flush();
  93. } catch (IOException e) {

  94. }

  95. }

  96. try {
  97. btSocket.close();
  98. } catch (IOException e2) {

  99. DisplayToast("套接字关闭失败!");
  100. }
  101. }
  102. @Override
  103. public void onStop() {
  104. super.onStop();
  105. }

  106. @Override
  107. public void onDestroy() {
  108. super.onDestroy();
  109. }
  110. @Override
  111. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  112. // TODO Auto-generated method stub

  113. }
  114. @Override
  115. public void onSensorChanged(SensorEvent event) {
  116. // TODO Auto-generated method stub
  117. view.onValueChanged(event.values);
  118. }
  119. public void DisplayToast(String str)
  120. {
  121. Toast toast=Toast.makeText(this, str, Toast.LENGTH_LONG);
  122. toast.setGravity(Gravity.TOP, 0, 220);
  123. toast.show();

  124. }

  125. class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{

  126. private float x,y,z;

  127. public MySurfaceView(Context context){
  128. super(context);
  129. getHolder().addCallback(this);

  130. }

  131. @Override
  132. public void surfaceChanged(SurfaceHolder holder, int format, int width,
  133. int height) {
  134. // TODO Auto-generated method stub
  135. x=(getWidth())/2;
  136. y=(getHeight())/2;
  137. onValueChanged(new float[3]);
  138. }
  139. @Override
  140. public void surfaceCreated(SurfaceHolder holder) {
  141. // TODO Auto-generated method stub

  142. }
  143. @Override
  144. public void surfaceDestroyed(SurfaceHolder holder) {
  145. // TODO Auto-generated method stub

  146. }
  147. @SuppressWarnings("static-access")
  148. void onValueChanged(float[] values){
  149. String message;
  150. byte[] msgBuffer;
  151. z=(int)(2+values[2]/5);
  152. x=(getWidth())/2;
  153. y=(getHeight())/2;
  154. x-=values[0]*10;
  155. y+=values[1]*10;
  156. Canvas canvas=getHolder().lockCanvas();
  157. if(canvas!=null){
  158. Paint paint=new Paint();
  159. Paint paint1=new Paint();
  160. paint1.setAntiAlias(true);
  161. paint1.setColor(Color.RED);
  162. paint1.setTextSize(38);
  163. paint.setAntiAlias(true);
  164. paint.setColor(Color.BLUE);
  165. paint.setTextSize(36);
  166. canvas.drawColor(Color.WHITE);
  167. canvas.drawText("BY liuviking", 50, 50, paint1);
  168. for(int i=0;i<values.length;i++)
  169. {
  170. canvas.drawText(accelerometer+":"+(int)values, 0, paint.getTextSize()*(i+1)+90,paint);
  171. }
  172. getHolder().unlockCanvasAndPost(canvas);
  173. }
  174. int yaxis=(int)values[1];
  175. int xaxis=(int)values[0];
  176. int flag=0;



  177. if(xaxis>=3 && yaxis>2 && yaxis<8)
  178. {
  179. flag=2;//xaxis大于3,前进标志为4,车子左转
  180. }
  181. else if(xaxis<=-3 && yaxis>2 && yaxis<8)//xaxis小于-3,前进标志为2,车子右转
  182. {
  183. flag=4;
  184. }

  185. //如果前后方向有信号:
  186. else if(yaxis>=8 && xaxis>-3 && xaxis<3)
  187. {
  188. flag=3;//zaxis大于9,前进标志为1,车子前进

  189. }
  190. else if(yaxis<=3 && xaxis>-3 && xaxis<3)
  191. {
  192. flag=1;//zaxis小于2,前进标志为3,车子后退

  193. }
  194. else
  195. {
  196. flag=0;
  197. }


  198. switch(flag)
  199. {
  200. case 0:
  201. try {
  202. outStream = btSocket.getOutputStream();
  203. } catch (IOException e) {

  204. }

  205. message = "0";
  206. msgBuffer = message.getBytes();
  207. try {
  208. outStream.write(msgBuffer);
  209. } catch (IOException e) {

  210. }
  211. break;
  212. case 1:
  213. try {
  214. outStream = btSocket.getOutputStream();
  215. } catch (IOException e) {

  216. }

  217. message = "1";
  218. msgBuffer = message.getBytes();
  219. try {
  220. outStream.write(msgBuffer);
  221. } catch (IOException e) {

  222. }
  223. break;
  224. case 2:
  225. try {
  226. outStream = btSocket.getOutputStream();
  227. } catch (IOException e) {

  228. }

  229. message = "2";
  230. msgBuffer = message.getBytes();
  231. try {
  232. outStream.write(msgBuffer);
  233. } catch (IOException e) {

  234. }
  235. break;
  236. case 3:
  237. try {
  238. outStream = btSocket.getOutputStream();
  239. } catch (IOException e) {

  240. }

  241. message = "3";
  242. msgBuffer = message.getBytes();
  243. try {
  244. outStream.write(msgBuffer);
  245. } catch (IOException e) {

  246. }
  247. break;
  248. case 4:
  249. try {
  250. outStream = btSocket.getOutputStream();
  251. } catch (IOException e) {

  252. }

  253. message = "4";
  254. msgBuffer = message.getBytes();
  255. try {
  256. outStream.write(msgBuffer);
  257. } catch (IOException e) {

  258. }
  259. break;

  260. }


  261. }

  262. }

  263. }
复制代码

本人第一代的重力感应控制蓝牙小车手机端源代码,比较简单,但是可以作为参考




AccelerometerDemo.rar (50.55 KB, 下载次数: 425)
回复

使用道具 举报

发表于 2012-8-7 23:14:54 | 显示全部楼层
好东西,先收藏备用。谢谢啦!:)
回复 支持 反对

使用道具 举报

发表于 2012-10-26 09:30:28 | 显示全部楼层
学习,谢谢
回复 支持 反对

使用道具 举报

发表于 2012-10-31 10:51:12 | 显示全部楼层
谢谢啦~~~
回复 支持 反对

使用道具 举报

发表于 2012-10-31 23:05:56 | 显示全部楼层
好东西。谢谢楼主提供!
回复 支持 反对

使用道具 举报

发表于 2013-1-11 14:01:50 | 显示全部楼层
收藏,学习!
回复 支持 反对

使用道具 举报

发表于 2013-3-21 14:57:15 | 显示全部楼层
感谢之至,好好学习
回复 支持 反对

使用道具 举报

发表于 2013-12-15 00:32:08 | 显示全部楼层
谢谢,感谢,参考学习。
回复 支持 反对

使用道具 举报

发表于 2014-4-16 15:08:07 | 显示全部楼层
用哪个团建编程的?
回复 支持 反对

使用道具 举报

发表于 2014-4-17 12:03:27 | 显示全部楼层
可以加上触屏控制吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-27 13:08 , Processed in 1.096865 second(s), 24 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表