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

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

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

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

creatButton.setOnClickListener(creatOnClickListener);

View.OnClickListener creatOnClickListener=new View.OnClickListener() {
		
		@Override
		public 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);
					//指定蓝牙可见状态可见时间为300s
					discoverIntent.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() {
		
		@Override
		public 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{

		@Override
		public 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 exception
			connected=false;
			try {
				socket.close();
				socket=null;
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.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 block
			e.printStackTrace();
		}	
	}


举例:

modeButton.setOnClickListener(modeOnClickListener);

//模式按钮
	View.OnClickListener modeOnClickListener=new View.OnClickListener() {
		
		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			sent("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单片机的通信啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值