写了上一篇的,就一不做,二不休的把今天才完成的自制的蓝牙遥控车吧,


咱分两步走第一部分是Android 方面的,第二是硬件Zigbee方面的。

先说Android方面的,


上源代码吧:

一、Android部分


我的代码运行顺序是先是WelcomActivity,过两秒后然后进入MainActivity,在这里配对成功后进入CMDActivity

1.1、布局方面的代码,为了美观把平常写的UI美化了一下。

1.11、activity_welcome.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:screenOrientation="landscape"    android:paddingTop="@dimen/activity_vertical_margin"    android:background="@drawable/hengping"    tools:context="com.example.hejingzhou.bluetoothtoydemo.WelcomeActivity"></RelativeLayout><span style="color:#660000;"></span>

对应的java
<span style="color:#660000;">package com.example.hejingzhou.bluetoothtoydemo;</span>import android.content.Intent;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Window;public class WelcomeActivity extends AppCompatActivity {    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_welcome);        handler = new Handler();        handler.postDelayed(newRun,3000);    }    private Runnable newRun = new Runnable() {        @Override        public void run() {            startActivity(new Intent(WelcomeActivity.this,MainActivity.class));            finish();        }    };}<span style="color:#660000;"></span>

//***************//**************//**********//**************//*****************//*****************//****************//******************//****************//

1.12、activity_main


<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:screenOrientation="landscape"    android:paddingTop="@dimen/activity_vertical_margin"    android:background="@drawable/q2"    tools:context="com.example.hejingzhou.bluetoothtoydemo.MainActivity">    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="允许对外可见"        android:id="@+id/buttonvisual"        android:textColor="#820041"        android:background="@drawable/shape"        android:layout_marginTop="35dp"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="搜索其他设备"        android:id="@+id/buttonsearch"        android:background="@drawable/shape_2"        android:textColor="#003e3e"        android:layout_alignTop="@+id/buttonvisual"        android:layout_toRightOf="@+id/buttonvisual"        android:layout_toEndOf="@+id/buttonvisual"        android:layout_marginLeft="49dp"        android:layout_marginStart="49dp"/>    <ImageView        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageViewExit"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"        android:layout_marginRight="38dp"        android:layout_marginEnd="38dp"        android:src="@drawable/exit"        android:layout_marginBottom="42dp"/>    <ListView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/listView"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_below="@+id/buttonvisual"        android:layout_toLeftOf="@+id/imageViewExit"        android:layout_toStartOf="@+id/imageViewExit"/></RelativeLayout>
上边这个布局所用到的
@dimen
写到@drawable文件夹内是针对Button的圆角处理的 详情是这样的
<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"       android:shape="rectangle" ><!-- 填充的颜色:这里设置背景透明 --><solid android:color="@android:color/transparent" /><!-- 边框的颜色 :不能和窗口背景色一样--><stroke    android:width="3dp"    android:color="#930093" /><!-- 设置按钮的四个角为弧形 --><!-- android:radius 弧形的半径 --><corners android:radius="5dip" /><!-- padding:Button里面的文字与Button边界的间隔 --><padding    android:bottom="10dp"    android:left="10dp"    android:right="10dp"    android:top="10dp" /></shape>


对应的java
<span style="color:#660000;">package com.example.hejingzhou.bluetoothtoydemo;</span>import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothServerSocket;import android.bluetooth.BluetoothSocket;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.*;import android.os.Process;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.Toast;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class MainActivity extends AppCompatActivity {    private Handler handler;    private Button ButVisual,ButSearchDevice;    private ImageView imageExit;    private ListView listView;    static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";    private UUID uuid;    private ArrayAdapter<String> adapterDevices;    private List<String> listDevices = new ArrayList<String>();    private BluetoothAdapter bluetoothAdapter;    public static BluetoothSocket socket = null;    public static BluetoothSocket bluetoothSocket;    public static AcceptThread acceptThread;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();        uuid = UUID.fromString(SPP_UUID);        findViewById();        InitBlueTooth();        click();    }    /**     * 单击监听     */    private void click() {        ButVisual.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent discoverableIntent = new Intent(                        BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);                discoverableIntent.putExtra(                        BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);                startActivity(discoverableIntent);            }        });        ButSearchDevice.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (bluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) {                    Toast.makeText(MainActivity.this, "请您打开蓝牙", Toast.LENGTH_SHORT).show();                    return;                }                //setTitle("本设备蓝牙地址" + bluetoothAdapter.getAddress());                listDevices.clear();                bluetoothAdapter.startDiscovery();            }        });        imageExit.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (bluetoothSocket != null)                    try {                        bluetoothSocket.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                MainActivity.this.finish();            }        });    }    private void findViewById() {        ButVisual = (Button)findViewById(R.id.buttonvisual);        ButSearchDevice = (Button)findViewById(R.id.buttonsearch);        imageExit = (ImageView)findViewById(R.id.imageViewExit);        listView = (ListView)findViewById(R.id.listView);        adapterDevices = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,listDevices);        listView.setAdapter(adapterDevices);        listView.setOnItemClickListener(new ItemClickEvent());    }    /**     * 初始化蓝牙     */    private void InitBlueTooth(){        if(bluetoothAdapter.getState() == BluetoothAdapter.STATE_ON)        {            //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\            handler = new Handler()            {               public void HanMessage(Message message)               {                   switch (message.what)                   {                       case  0:                           acceptThread = new AcceptThread();                           acceptThread.start();//开启线程的时候出错                   }               }            };                IntentFilter intentFilter = new IntentFilter();                intentFilter.addAction(BluetoothDevice.ACTION_FOUND);                intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);                intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);                intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);                registerReceiver(searchDevices, intentFilter);        } else if(bluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF)        {            bluetoothAdapter.enable();            try {                Thread.sleep(1000);            }          /*  try {                if(bluetoothAdapter.getState() == BluetoothAdapter.STATE_ON)                {                    Toast.makeText(MainActivity.this,"已打开蓝牙",Toast.LENGTH_SHORT).show();                    //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\                    handler = new Handler()                    {                        public void HanMessage(Message message)                        {                            switch (message.what)                            {                                case  0:                                    acceptThread = new AcceptThread();                                    acceptThread.start();//开启线程的时候出错                            }                        }                    };                    IntentFilter intentFilter = new IntentFilter();                    intentFilter.addAction(BluetoothDevice.ACTION_FOUND);                    intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);                    intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);                    intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);                    registerReceiver(searchDevices, intentFilter);                }else                {                    Toast.makeText(MainActivity.this,"蓝牙打开失败,请手动打开",Toast.LENGTH_SHORT).show();                    return;                }            }*/ catch (Exception e) {                Toast.makeText(MainActivity.this,"STATE_OFF注册错误",Toast.LENGTH_SHORT).show();            }            } /*catch (InterruptedException e) {                e.printStackTrace();        }*/    }    /**     * 管理蓝牙连接套接口     */    private void manageConnectedSocket()    {        bluetoothSocket = socket;        startActivity(new Intent(MainActivity.this,CMDActivity.class));    }    /**     * BroadcastReceiver基类代码,将收到发送的意图sendBroadcast()。     */    private BroadcastReceiver searchDevices = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            Bundle bundle = intent.getExtras();            Object[] objectName = bundle.keySet().toArray();            //显示详细的消息细节            for(int i = 0;i<objectName.length;i++)            {                String keyName = objectName[i].toString();                Log.e(keyName,String.valueOf(bundle.get(keyName)));            }            //搜索到设备时            if(BluetoothDevice.ACTION_FOUND.equals(action))            {                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);                String str = device.getName()+"|"+device.getAddress();                if(listDevices.indexOf(str) == -1 )                {                    listDevices.add(str);                }                adapterDevices.notifyDataSetChanged();//每次改变就刷新            }        }    };    @Override    protected void onDestroy() {        this.unregisterReceiver(searchDevices);//取消注册量        super.onDestroy();        android.os.Process.killProcess(Process.myPid());        acceptThread.cancel();        acceptThread.destroy();    }    class ItemClickEvent implements AdapterView.OnItemClickListener    {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {            String str = listDevices.get(position);            String[] values = str.split("\\|");            String address = values[1];            Log.e("address",values[1]);            uuid = UUID.fromString(SPP_UUID);            Log.e("uuid",uuid.toString());            BluetoothDevice bluetoothDevice = bluetoothAdapter.getRemoteDevice(address);            Method method;            try {                method = bluetoothDevice.getClass().getMethod("createRfcommSocket",new Class[] {int.class});                bluetoothSocket = (BluetoothSocket)method.invoke(bluetoothDevice,Integer.valueOf(1));            } catch (NoSuchMethodException e) {                e.printStackTrace();            } catch (InvocationTargetException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            }            bluetoothAdapter.cancelDiscovery();            try {                bluetoothSocket.connect();                startActivity(new Intent(MainActivity.this,CMDActivity.class));            } catch (IOException e) {                e.printStackTrace();            }        }    }    class AcceptThread extends Thread    {        private final BluetoothServerSocket serverSocket;        public AcceptThread()        {            BluetoothServerSocket tmp = null;            try {                Method listenMethod = bluetoothAdapter.getClass().getMethod("listenUsingRfcommOn",new Class[]{int.class});                tmp = (BluetoothServerSocket)listenMethod.invoke(bluetoothAdapter,Integer.valueOf(1));            } catch (NoSuchMethodException e) {                e.printStackTrace();            } catch (InvocationTargetException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            }            serverSocket = tmp;        }        public void run()        {            while(true)            {                try {                    socket = serverSocket.accept();                } catch (IOException e) {                    break;                }                if(socket != null)                {                    manageConnectedSocket();                    try {                        serverSocket.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                    break;                }            }            Message message = new Message();            message.what = 0;            handler.sendMessage(message);        }        //将取消监听套接字,导致线程结束        public void cancel()        {            try {                serverSocket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}<span style="color:#660000;"></span>

//***************//**************//**********//**************//*****************//*****************//****************//******************//****************//
1.13、activity_cmd.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:background="@drawable/www"    tools:context="com.example.hejingzhou.bluetoothtoydemo.CMDActivity">    <ImageButton        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageButtonShang"        android:background="@drawable/shang"        android:layout_marginLeft="19dp"        android:layout_marginStart="19dp"        android:layout_above="@+id/imageButtonYuan"        android:layout_toRightOf="@+id/imageButtonZuo"        android:layout_toEndOf="@+id/imageButtonZuo"        android:layout_marginBottom="25dp"/>    <ImageButton        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageButtonXia"        android:background="@drawable/xia"        android:layout_marginTop="25dp"        android:layout_below="@+id/imageButtonZuo"        android:layout_alignLeft="@+id/imageButtonYuan"        android:layout_alignStart="@+id/imageButtonYuan"/>    <ImageButton        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageButtonZuo"        android:background="@drawable/zuo"        android:layout_centerVertical="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"/>    <ImageButton        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageButtonYou"        android:background="@drawable/you"        android:layout_marginLeft="23dp"        android:layout_marginStart="23dp"        android:layout_above="@+id/imageButtonXia"        android:layout_toRightOf="@+id/imageButtonShang"        android:layout_toEndOf="@+id/imageButtonShang"/>    <ImageButton        android:layout_width="60dp"        android:layout_height="60dp"        android:id="@+id/imageButtonYuan"        android:background="@drawable/yuan"        android:layout_above="@+id/imageButtonXia"        android:layout_toLeftOf="@+id/imageButtonYou"        android:layout_toStartOf="@+id/imageButtonYou"/>    <ImageButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/imageButtondisconnect"        android:src="@drawable/duankai"        android:background="#00000000"        android:layout_marginRight="107dp"        android:layout_marginEnd="107dp"        android:layout_alignBottom="@+id/imageButtonXia"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"/>    <ImageButton        android:layout_width="40dp"        android:layout_height="40dp"        android:id="@+id/imageButtonLight"        android:src="@drawable/dengpao"        android:background="#00000000"        android:layout_marginRight="30dp"        android:layout_marginEnd="30dp"        android:layout_alignTop="@+id/imageButtondisconnect"        android:layout_toLeftOf="@+id/imageButtondisconnect"        android:layout_toStartOf="@+id/imageButtondisconnect"/>    <ImageButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/imageButtonBACK"        android:background="@drawable/fanhui"        android:layout_marginRight="32dp"        android:layout_marginEnd="32dp"        android:layout_alignBottom="@+id/imageButtonLight"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"/></RelativeLayout><span style="color:#660000;"></span>

对应的JAVA

<span style="color:#660000;">package com.example.hejingzhou.bluetoothtoydemo;</span>import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.widget.CompoundButton;import android.widget.ImageButton;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;public class CMDActivity extends AppCompatActivity {    public static boolean isRecording = false;    private ImageButton IBUp;    private ImageButton IBDown;    private ImageButton IBLeft;    private ImageButton IBRight;    private ImageButton IBYuan;    private ImageButton IBLight;    private ImageButton IBDisconnect;    private ImageButton IBBack;    private TextView test;    private OutputStream outputStream = null;    private Handler handler;    private ConnectedThread connectedThread;    private String encodeType = "UTF-8";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_cmd);        findViewById();        click();        connectedThread = new ConnectedThread();        handler = new MyHandler();        connectedThread.Start();    }    private void click() {        IBBack.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                CMDActivity.this.finish();            }        });        IBDisconnect.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    MainActivity.bluetoothSocket.close();                } catch (IOException e) {                    e.printStackTrace();                }                connectedThread.Stop();            }        });        IBUp.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {                    sendMessage("U0#");                } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {                    sendMessage("U1#");                }                return false;            }        });        IBDown.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {                    sendMessage("U0#");                } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {                    sendMessage("U1");                }                return false;            }        });        IBLeft.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {                    sendMessage("30");                } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {                    sendMessage("31");                }                return false;            }        });        IBRight.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {                    sendMessage("40");                } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {                    sendMessage("41");                }                return false;            }        });        /*IBLight.setOnTouchListener(new View.OnTouchListener() {            boolean isClick = false;            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {                    sendMessage("L0#");                    isClick = true;                } else if (event.getActionMasked() == MotionEvent.ACTION_UP) {                    sendMessage("L1#");                }                return false;            }        });*/        IBLight.setOnClickListener(new View.OnClickListener() {            int a = 1 ;            @Override            public void onClick(View v) {                if((a%2==0)==false)                {                    sendMessage("L0#");                }else if((a%2==0)==true)                {                    sendMessage("L1#");                }                a++;            }        });    }    public void sendMessage(String strCmd) {        try {            outputStream = MainActivity.bluetoothSocket.getOutputStream();        } catch (IOException e) {            e.printStackTrace();        }        byte[] msgbuffer = null;        try {            msgbuffer = strCmd.getBytes(encodeType);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        try {            outputStream.write(msgbuffer);        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    protected void onDestroy() {        try {            MainActivity.bluetoothSocket.close();        } catch (IOException e) {            e.printStackTrace();        }        super.onDestroy();    }    private void findViewById() {        IBUp = (ImageButton) findViewById(R.id.imageButtonShang);        IBDown = (ImageButton) findViewById(R.id.imageButtonXia);        IBLeft = (ImageButton) findViewById(R.id.imageButtonZuo);        IBRight = (ImageButton) findViewById(R.id.imageButtonYou);        IBYuan = (ImageButton) findViewById(R.id.imageButtonYuan);        IBLight = (ImageButton) findViewById(R.id.imageButtonLight);        IBBack = (ImageButton)findViewById(R.id.imageButtonBACK);        IBDisconnect = (ImageButton) findViewById(R.id.imageButtondisconnect);    }    /***     * 连接线程     */    class ConnectedThread extends Thread {        private InputStream inputStream = null;        private long wait;        private Thread thread;        public ConnectedThread() {            isRecording = false;            this.wait = 50;            thread = new Thread(new ReadRunnable());        }        public void Stop() {            isRecording = false;        }        public void Start() {            isRecording = true;            State state = thread.getState();            if (state == State.NEW) {                thread.start();            } else thread.resume();        }        private class ReadRunnable implements Runnable {            @Override            public void run() {                try {                    inputStream = MainActivity.bluetoothSocket.getInputStream();                } catch (IOException e) {                    e.printStackTrace();                }                int length = 20;                byte[] temp = new byte[length];                if (inputStream != null) {                    try {                        int len = inputStream.read(temp, 0, length - 1);                        if (len > 0) {                            byte[] bluetoothBuff = new byte[len];                            System.arraycopy(temp, 0, bluetoothBuff, 0, bluetoothBuff.length);                            String readstr = new String(bluetoothBuff, encodeType);                        }                        Thread.sleep(wait);                    } catch (IOException e) {                        handler.sendEmptyMessage(00);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }        /**         * sendMessage         */        /*public void sendMessage(String strCmd) {            try {                outputStream = MainActivity.bluetoothSocket.getOutputStream();            } catch (IOException e) {                e.printStackTrace();            }            byte[] msgbuffer = null;            try {                msgbuffer = strCmd.getBytes(encodeType);            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }            try {                outputStream.write(msgbuffer);            } catch (IOException e) {                e.printStackTrace();            }        }*/    }    private class MyHandler extends Handler {        @Override        public void dispatchMessage(Message msg) {            switch (msg.what) {                case 00:                    isRecording = false;                    break;                case 01:                    String info = (String) msg.obj;                    break;                default:                    break;            }            super.dispatchMessage(msg);        }    }}<span style="color:#660000;"></span>


//***************//**************//**********//**************//*****************//*****************//****************//******************//****************//

二、Zigbee程序

<span style="color:#009900;"></span>#include <ioCC2530.h>#include <string.h>#define uint unsigned int#define uchar unsigned char//定义控制LED灯的端口#define LED1 P0_6#define R1 P2_0#define In P1_0//函数声明void Delayms(uint xms);//延时函数void InitLed(void);//初始化void InitUart();              //初始化串口void Uart_Send_String(char *Data,int len);void Infrared(void);char Rxdata[3];uchar RXTXflag = 1; char temp; uchar  datanumber = 0;/****************************//延时函数*****************************/void Delayms(uint xms)   //i=xms 即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M){ uint i,j; for(i=xms;i>0;i--)   for(j=587;j>0;j--);} /****************************//初始化程序*****************************/void InitLed(void){P0DIR |= 0x50; //定义为输出  0100 0000        P2DIR |= 0x01;        //P0DIR |= 0x20;LED1 = 0;       //LED1、2灯熄灭        R1 = 1;          }//红外控制初始化**********************void Infrared(void){  P1DIR &= ~0x01;  P1SEL |= 0x01;  In = 0;}/****************************************************************    串口初始化函数     ***********************************************************/void InitUart(){    CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振    while(CLKCONSTA & 0x40);                     // 等待晶振稳定     CLKCONCMD &= ~0x47;                          // 设置系统主时钟频率为 32MHZ    PERCFG = 0x00;        //位置1 P0口     P0SEL = 0x3c;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能     P2DIR &= ~0XC0;      //P0 优先作为UART0 ,优先级     U0CSR |= 0x80;       //UART 方式     U0GCR |= 11;           //U0GCR与U0BAUD配合         U0BAUD |= 216;       // 波特率设为115200     UTX0IF = 1;          //UART0 TX 中断标志初始置位1  (收发时候)    U0CSR |= 0X40;        //允许接收     IEN0 |= 0x84;       // 开总中断,接收中断    }/**************************************************************** 串口发送字符串函数    ****************************************************************/ void Uart_Send_String(char *Data,int len) { {   int j;   for(j=0;j<len;j++)   {     U0DBUF = *Data++;     while(UTX0IF == 0);     UTX0IF = 0;   }  }}/***************************//主函数***************************/void main(void){    InitLed();//调用初始化函数   InitUart();  Infrared();//初始化红外      while(1)  {     if(RXTXflag == 1)     //接收状态      {         if( temp != 0)         {            if((temp!='#')&&(datanumber<3)) //'#'被定义为结束字符,最多能接收50个字符                      Rxdata[datanumber++] = temp;            else            {              RXTXflag = 3;                     //进入发送状态            }                     temp  = 0;         }      }      if(RXTXflag == 3)     //检测接收到的数据      {                        if(Rxdata[0]=='L')       {                 switch(Rxdata[1]-48)//很重要,ASICC码转成数字,判断L后面第一个数          {      case 0:        {          LED1=1; //点亮          break;        }      case 1:        {          LED1=0;          break;        }       }        }      else if(Rxdata[0]=='U')      {        switch(Rxdata[1]-48)        {        case 0:                    R1 = 0;          break;        case 1:                  R1 = 1;          break;        }      }       RXTXflag = 1;                datanumber = 0;                     //指针归 0      }     ///***************************       if(R1!=0)     {       if((In == 1)&&(LED1!=1 ))  {    LED1 = 1;  }else if((In == 1) && (LED1==1))  {    LED1 = 0;  }     }    ///***************************    } }/**************************************************************** 串口接收一个字符: 一旦有数据从串口传至CC2530, 则进入中断,将接收到的数据赋值给变量temp. ****************************************************************/ #pragma vector = URX0_VECTOR   __interrupt void UART0_ISR(void)  {   URX0IF = 0;    // 清中断标志   temp = U0DBUF;                           
          

因为硬件不够只做了车的前进,和控制LED小灯。。。。。 看效果:

三秒后。。。。 android蓝牙遥控车_第1张图片
配对成功后。。。。 android蓝牙遥控车_第2张图片

我自造的小车。。。。。 android蓝牙遥控车_第3张图片

android蓝牙遥控车_第4张图片


android蓝牙遥控车_第5张图片


写的有点乱。给你们源代码
android端:http://download.csdn.net/detail/csdnhejingzhou/9413347 Zigbee端:http://download.csdn.net/detail/csdnhejingzhou/9413322

更多相关文章

  1. 【Android】SerialPortFinder学习笔记,显示串口列表
  2. Android中动态初始化布局参数以及ConstraintLayout使用中遇到的
  3. Android 搜索不到蓝牙设备
  4. android 4.0 蓝牙分析之二
  5. Android GPS学习笔记—LMS初始化
  6. android修改MTP及MTP(PC显示名称)、PTP盘符名、蓝牙名称
  7. Android 扫码器串口通讯
  8. 关于android 经典蓝牙开发 使用UUID连接的问题
  9. Android BlueDroid(二):BlueDroid蓝牙开启过程init

随机推荐

  1. Android(安卓)的7种CPU架构
  2. Android(安卓)java.lang.RuntimeExceptio
  3. Android sdk update
  4. 今天遇到的几个xml属性
  5. Android如何实现全屏
  6. Android关于自定义ExpandableListView样
  7. android下ListView的奇异异常大集合(持续
  8. 我的android笔记
  9. Android Bug 汇总
  10. Bad CPU type in executable