android蓝牙遥控车

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


咱分两步走第一部分是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

你可能感兴趣的:(android蓝牙,android控制蓝牙模块)