Android开发板串口读写操作

本文介绍了如何在Android开发板上进行串口读写操作。首先,需要将com.friendlyarm.AndroidSDK导入项目。读取操作涉及从串口接收信息,而写入操作则涉及向串口发送数据。在连续发送数据或退出时,务必使用handler2.removeCallbacks(runnable)停止之前的循环发送,以避免不必要的重复执行。

首先,把com.friendlyarm.AndroidSDK包(自己下载)添加到项目中。

//打开串口,返回串口描述符fd
fd = HardwareControler.openSerialPort(choose_serialport,choose_baudrate, choose_databits, choose_stopbit);
if (fd != -1) {//打开成功
	new readThread().start();//开始串口的监听线程
} else {//打开失败

 
}
					
//关闭串口操作
HardwareControler.close(fd);


读取串口信息操作:

Handler handler = new Handler() {
	public void handleMessage(Message msg) {
		switch (msg.arg1) {
		case 0:   
 			int len=HardwareControler.read(fd, buf, 300);  //读取串口
        		byte[] hexbuf =new byte[300];
        		byteToHex(buf, hexbuf, len);
       			String bufstring = new String(buf, 0, len);
        		String hexstring = toHex(bufstring); //16进制
                
        		//在这里进行数据的处理
 
       
        		new readThread().start();//处理完消息后立即开启监听线程
                	break;
       		case 1:
               	 	HardwareControler.setLedState(1, 0);
                	new readThread().start();
                	Log.d("readThread","没有数据,新线程启动");
                	break;
       		default:
                	break;
       		}
	}
};
    

//读取串口信息线程

public class readThread extends Thread {        
	public void run(){
            	Message msg = new Message();
            	HardwareControler.setLedState(0, 0);
            	if (HardwareControler.select(fd,5, 0)==1) {  //有数据可读          
                	msg.arg1 = 0;            
            	} else if (HardwareControler.select(fd,5, 0)==0) {  //无数据可读
                	msg.arg1 = 1;
                	HardwareControler.setLedState(0, 1);
            	} else {  //出错
            		msg.arg1 = -1;
            	}
            	handler.sendMessage(msg);
        }
}


往串口里写数据:

HardwareControler.write(fd, bytebuf);     //bytebuf为写入的数据,byte[]类型

//设置循环发送定时器
Handler handler2 = new Handler() {};
Runnable runnable=new Runnable(){
    	
	@Override
	public void run() {
    	 	// TODO Auto-generated method stub
    		//要做的事情
    		    		
		handler2.postDelayed(this, Long.parseLong(time) );  //time为循环发送的时间间隔
      	}
};


    注意,在执行上述的循环发送数据操作后,还需执行新的发送数据操作或者退出时都要先执行handler2.removeCallbacks(runnable)语句,否则之前的循环发送操作则会不断的执行。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值