bluetooth控制Arduino单片机的红外发射装置(二)——Android部分

来源:互联网 发布:微信小程序在js中遍历 编辑:程序博客网 时间:2024/04/28 20:40

继上次更新的Bluetooth控制Arduino单片机项目的arduino部分之后,本期将更新Android手机跟Bluetooth通信部分,主要是Eclipse平台的Java编程,以及Arduino平台的C编程。

开始之前,我们来看一下Android手机和Bluetooth实现通信的答题思路。

第一步,我们需要打开Android手机的本地蓝牙设备。

creatButton.setOnClickListener(creatOnClickListener);

View.OnClickListener creatOnClickListener=new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//得到BluetoothAdapter对象//判断手机是否有蓝牙设备if(adapter!=null){if (adapter.isEnabled()) {TextView.setText(R.string.bluetoothon_TextView);}else if(!adapter.isEnabled()) {//修改蓝牙设备的可见性Intent discoverIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//指定蓝牙可见状态可见时间为300sdiscoverIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);//弹出对话框询问是否执行此操作startActivity(discoverIntent);TextView.setText(R.string.bluetoothon_TextView);}}}};

第二步,我们需要搜索所需要的蓝牙设备,我用的是HC-05的蓝牙模块。

scanButton.setOnClickListener(scanOnClickListener);

//开始扫描周边的蓝牙设备,并发送广播View.OnClickListener scanOnClickListener =new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//开始扫描周边的蓝牙设备,并发送广播adapter.startDiscovery();}};

注册一个广播来看是否搜索到HC-05此蓝牙设备。若搜索到HC-05,则在listview中显示HC-05的信息,并且停止搜索。(注意:我们事先将安卓手机和HC-05蓝牙模块进行配对,使用的是android系统自带的蓝牙配对方式)

private String nameBluetoothString="HC-05";//蓝牙设备名称

//创建Intent过滤器IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);bluetoothReceiver = new BluetoothReceiver();//注册广播接收器registerReceiver(bluetoothReceiver, intentFilter);


//接收广播private class BluetoothReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context,Intent intent) {String action = intent.getAction();if(BluetoothDevice.ACTION_FOUND.equals(action)) {//得到远程蓝牙设备的对象device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//显示搜索到的蓝牙设备信息,只显示一行蓝牙设备ArrayList<HashMap<String, Object> > myList=new ArrayList<HashMap<String,Object>>();for(int i=0;i<1;i++) {HashMap<String, Object> map =new HashMap<String, Object>();map.put("num","\nBlueTooth:");map.put("info", "NAME:"+device.getName()+"\n"+"MAC:"+device.getAddress()+"\r");myList.add(map);}//若搜索到所需的蓝牙设备,则停止继续搜索if (device.getName().equalsIgnoreCase(nameBluetoothString)) {adapter.cancelDiscovery();//Toast信息显示Toast.makeText(getApplicationContext(), R.string.toast_String1,Toast.LENGTH_SHORT).show();}//ListView适配器(重点注意第一个参数的写法)SimpleAdapter mySimpleAdapter=new SimpleAdapter(context, myList, R.layout.listview_bluetooth, new String[] {"num","info"}, new int[] {R.id.num_bluetoothdevice,R.id.info_bluetoothdevice});listView.setAdapter(mySimpleAdapter);}}}


第三步,我们则需要连接HC-05。

//全球唯一标示符,用于普通蓝牙适配器和android手机蓝牙模块连接的private static final UUID MY_UUID=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

public void connectDevice(){try {socket=device.createRfcommSocketToServiceRecord(MY_UUID);socket.connect();connected=true;linearLayout1.setVisibility(View.VISIBLE);} catch (Exception e) {// TODO: handle exceptionconnected=false;try {socket.close();socket=null;} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}

最后一步,连接蓝牙成功之后,我们需要来发送msg给Arduino单片机。

//发送数据函数public void sent(String string){if (socket==null) {Toast.makeText(getApplicationContext(), "未连接", Toast.LENGTH_SHORT).show();return;}try {OutputStream osOutputStream =socket.getOutputStream();osOutputStream.write(string.getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}


举例:

modeButton.setOnClickListener(modeOnClickListener);

//模式按钮View.OnClickListener modeOnClickListener=new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubsent("m");}};


上面涉及到安卓手机蓝牙的四个操作步骤,只有关键性的函数代码,希望可以对自己或对他人有所帮助。


接下来,就是在Arduino层面上的蓝牙msg接收工作,我们还是以模式按钮为例。

#include <SoftwareSerial.h>#include <IRremote.h>SoftwareSerial BT(10,9);const byte ledPin = 13;char val;String str;IRsend irsend;unsigned int test1[]={2086,27038,556,1372,532,3384,516};unsigned int ddelay[]={0,67260};unsigned int danfan1[]={600,1300,600,3300,600};unsigned int danfan2[]={600,1300,600,3300,600,26850};void setup(){  pinMode(ledPin,OUTPUT);  BT.begin(9600);  Serial.begin(9600);  //BT.print("bluetooth is ready!!!");}void loop(){  if(BT.available()){    val=BT.read();        switch(val){                  //mode      case 'm':      irsend.sendRaw2(test1,7,38);      delay(67);      irsend.sendRaw2(test1,7,38);      //Serial.println(val);      break;                        default:      break;    }  }}


这样就可以通过蓝牙实现Android手机好Arduino单片机的通信啦!

0 0