繁体   English   中英

JSerial-无法从串行端口读取数据

[英]JSerial - cannot read data from serial port

目前,我正在使用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.");
            }
        });

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

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

 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();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM