import库
首先在执行串口任务的MainActivity中import如下库:
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import android.util.Log;
import android.text.Html;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
import com.friendlyarm.FriendlyThings.HardwareControler;
import com.friendlyarm.FriendlyThings.BoardType;
import android.os.Handler;
import android.os.Message;
import android.content.Context;
import android.content.Intent;
以上为常用的必要库,其他库(如imagebutton)根据需要自行添加。
串口配置
然后在主类onCreate方法外进行串口设置的配置,如下:
private String devName = "/dev/ttyAMA3";
private int speed = 115200;
private int dataBits = 8;
private int stopBits = 1;
private int devfd = -1;
【说明:博主使用二代friendlyARM屏,串口设置为ttyAMA3,使用其他设备请读者具体查看手册等资料了解后修改】
不妨在后头写一个关闭串口的方法:
@Override
public void onDestroy() {
timer.cancel();
if (devfd != -1) {
HardwareControler.close(devfd);
devfd = -1;
}
super.onDestroy();
}
串口线程
下面书写串口线程,是重点:
private final int BUFSIZE = 512;
private byte[] buf = new byte[BUFSIZE];
private Timer timer = new Timer();
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (HardwareControler.select(devfd, 0, 0) == 1) {
int retSize = HardwareControler.read(devfd, buf, BUFSIZE);
if (retSize > 0) {
String str = new String(buf, 0, retSize);
}
}
break;
}
super.handleMessage(msg);
}
};
private TimerTask task = new TimerTask() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
打开串口
接下来在onCreate方法中打开串口,写:
HardwareControler.openSerialPort( devName, speed, dataBits, stopBits );
串口发送数据
使用HardwareControler.write方法,具体如下:
String senddata = "3";
HardwareControler.write(devfd,senddata.getBytes());
实例操作
以上初步实现了串口通信,即可以通过安卓屏获取串口发来的消息,也可以使用安卓屏通过串口发送数据。
接下来,博主在这里给出项目中使用的实例,通过按钮触发显示串口接受的值:
String str_temp;
String str_weet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_temperature);
HardwareControler.openSerialPort( devName, speed, dataBits, stopBits );
Button btn_back = (Button) findViewById(R.id.temp_back_btn);
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivityTemperature.this,MainActivityChoose.class);
startActivity(intent);
}
});
Button tempget_btn = (Button)findViewById(R.id.tempgetbtn);
tempget_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView txv_temp = (TextView) findViewById(R.id.temprecieve);
txv_temp.setText(str_temp);
}
});
Button weetget_btn = (Button)findViewById(R.id.weetgetbtn);
weetget_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
TextView txv_weet = (TextView) findViewById(R.id.weetrecieve);
txv_weet.setText(str_weet);
}
});
}
注意:
①本程序中通过id访问(findViewById)的按钮和文本均在activity对应的xml文件中配置好。 ②str_temp和str_weet需要在串口线程中赋予str值,在此处省略。
|