现在智能手机很流行,所以就想到用手机来控制小车,现在实现的功能有:可以获取视频,按钮控制、重力感应;就说下简单的设计思路:
1.小车和手机建立通信:
通过手机上的无线功能来连接单片机上的wifi模块,具体操作是通过socket编程,wifi模板相当于服务器,手机类似于客户端,wifi模板上有固定的地址和端口,具体代码
Socket mSocketClient = null;
public static String CtrlIp=“192.168.1.1”;
public static String CtrlPort=“2001”;
mSocketClient = new Socket(CtrlIp,CtrlPort);
2.控制小车行动:
手机和小车连接成功后,就可以发送指令,这些指令都是之前已经烧写在单片机中,所以只要有输出流写就可以了,
static byte []FORWORD={(byte)-1,(byte)0,(byte)1,(byte)0,(byte)-1};
static byte []BACK={(byte)-1,(byte)0,(byte)2,(byte)0,(byte)-1};
static byte []LEFT={(byte)-1,(byte)0,(byte)3,(byte)0,(byte)-1};
static byte []RIGHT={(byte)-1,(byte)0,(byte)4,(byte)0,(byte)-1};
static byte []STOP={(byte)-1,(byte)0,(byte)0,(byte)0,(byte)-1};
//取得输入、输出流
mSocketClient.getOutputStream().write(meg);
mSocketClient.close();
其中meg参数就是对应的动作指令
3.获取视频
视频地址也是通过WiFi模块来进行访问:http://192.168.1.1:8080/?action=stream
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.SurfaceHolder.Callback;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Callback
{
private SurfaceHolder sfh;
private Canvas canvas;
URL videoUrl;
private String urlstr;
HttpURLConnection conn;
Bitmap bmp;
private Paint p;
InputStream inputstream=null;
private Bitmap mBitmap;
private static int mScreenWidth;
private static int mScreenHeight;
public boolean Is_Scale = false;
public MySurfaceView(