JSerial - 无法从串口读取数据

时间:2017-10-07 11:54:32

标签: java

目前,我正在与JSerial库一起向微控制器写入/读取数据。此[0x00AA550A]检查电池电量,应返回[0х00AA5502XXYYYY] XX为十六进制的百分比。

我在这里写数据:

SerialPort port = SerialPort.getCommPorts()[0];
port.openPort();
try {
     byte[] b = new byte[]{ (byte) 0x00, (byte) 0xAA, (byte) 0x55, (byte) 0x0A };

     int writter = port.writeBytes(b, b.length);
} catch (Exception e) {
     e.printStackTrace();
}

下面我从微控制器读取数据:

port.addDataListener(new SerialPortDataListener() {
            @Override
            public int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; }
            @Override
            public void serialEvent(SerialPortEvent event)
            {
                if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
                    return;
                byte[] newData = new byte[port.bytesAvailable()];
                int numRead = port.readBytes(newData, newData.length);
                System.out.println("Read " + numRead + " bytes.");
            }
        });

但结果没有显示出来。空控制台。请问,请告诉我我的代码有什么问题,建议更好的建议

1 个答案:

答案 0 :(得分:0)

如果您没有初始化串口,那可能就是原因。 请根据您的环境设置这些值。

 port.setBaudRate(9600);
 port.setNumDataBits(8);
 port.setNumStopBits(1);
 port.setParity(0);
 port.setFlowControl(0);

或者您的PC上有更多的控制台端口,[0]不是正确的控制台端口 你想要联系。

在这里,我只发布适合我的代码。

  private void connect() {
    String str = (String) model.getElementAt(boxSerial.getSelectedIndex());
    SerialPort[] ports = SerialPort.getCommPorts();

    SerialPort port = null;
    for (SerialPort porta : ports) {
        if (str.equalsIgnoreCase(porta.getDescriptivePortName())) {
            port = porta;
            break;
        }
    }

    if (port != null) {
        port.setBaudRate(9600);
        port.setNumDataBits(8);
        port.setNumStopBits(1);
        port.setParity(0);
        port.setFlowControl(0);


        port.addDataListener(new SerialPortDataListener() {
            @Override
            public int getListeningEvents() {
                return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
            }

            @Override
            public void serialEvent(SerialPortEvent serialPortEvent) {


                if (serialPortEvent.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE){
                    System.out.println("  event_type="+serialPortEvent.getEventType());
                    return;
                }


                try {
                    int len = serialPortEvent.getSerialPort().bytesAvailable();

                    byte data[] = new byte[len];
                    serialPortEvent.getSerialPort().readBytes(data, len);

                    for (int i = 0; i < data.length; i++) {
                        byte b = data[i];
                        System.out.print(String.format("%02x ",b));
                    }                       
                    System.out.println();
                } catch (Exception exp) {
                    exp.printStackTrace();
                }
            }
        });
        boolean b = port.openPort();
        if (!b) {
            port.closePort();
        }
    }
}