java rxtx串口通信问题 和 rfid问题

小土豆闪电饼 2017-05-12 09:46:36
做一个小程序,rfid接开发板连到串口,需要从串口读取rfid的刷卡信息并显示。
现在的问题是:1、为什么会出现不识别的小框? 2、困扰许久……为什么刷同一张ic卡,显示卡号会有变化?这个用串口调试软件也是一样的问题……


串口通信代码如下:
public class ReadSerial implements Runnable,SerialPortEventListener {

static Enumeration<CommPortIdentifier> portList;
static CommPortIdentifier portId;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;

@SuppressWarnings("unchecked")
public static void main(String[] args){
/*不带参数的getPortIdentifiers方法获得一个枚举对象
* 该对象又包含了系统中管理每个端口的CommPortIdentifier对象
* 这里的端口不仅仅是指串口,也包括并口*/
portList=CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements()){
portId=(CommPortIdentifier) portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
if(portId.getName().equals("COM7")){
@SuppressWarnings("unused")
ReadSerial reader=new ReadSerial();
}
}
}
}

public ReadSerial(){
/*open方法打开通讯端口,获得一个CommPort对象
*参数1 应用程序名,参数2 在端口打开时阻塞等待的毫秒数*/
try {
serialPort=(SerialPort) portId.open("jjt", 2000);
} catch (PortInUseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*获取端口的输入流对象*/
try {
inputStream=serialPort.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*注册一个SerialPortEventListener事件来监听串口事件*/
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*数据可用*/
serialPort.notifyOnDataAvailable(true);
/*设置串口初始化参数*/
try {
serialPort.setSerialPortParams(115200, //波特率
SerialPort.DATABITS_8, //数据位
SerialPort.STOPBITS_1, //停止位
SerialPort.PARITY_NONE); //校验
} catch (UnsupportedCommOperationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
readThread=new Thread(this);
readThread.start();
}

@Override
public void serialEvent(SerialPortEvent event) {
// TODO Auto-generated method stub
switch(event.getEventType()){
case SerialPortEvent.BI:
case SerialPortEvent.OE:/*Overrun error,溢位错误*/
case SerialPortEvent.FE:/*Framing error,传帧错误*/
case SerialPortEvent.PE:/*Parity error,校验错误*/
case SerialPortEvent.CD:/*Carrier detect,载波检测*/
case SerialPortEvent.CTS:/*Clear to send,清除发送*/
case SerialPortEvent.DSR:/*Data set ready,数据设备就绪*/
case SerialPortEvent.RI:/*Ring indicator,响铃指示*/
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*输出缓冲区清空*/
break;
case SerialPortEvent.DATA_AVAILABLE:/*端口有可用数据。读到缓冲数组,输出到终端*/
byte[] readBuffer=new byte[1024];

int count=0;
try {
/*返回读取的字节数*/
count = inputStream.read(readBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*从开始读到count个字节再转为字符串*/
String readStr=new String(readBuffer,0,8);
System.out.println(readStr);
}
}

@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
...全文
376 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CharlesJhonson 2017-06-05
  • 打赏
  • 举报
回复
博主,做得怎么样了?我也遇到类似的问题,能请教一下吗?
小土豆闪电饼 2017-05-13
  • 打赏
  • 举报
回复
小土豆闪电饼 2017-05-12
  • 打赏
  • 举报
回复
代码比较简单,现让它只读COM7的数据,并且卡号8位所以让他每次读8个字节
小土豆闪电饼 2017-05-12
  • 打赏
  • 举报
回复
第一次发帖 求帮助

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧