目前,我正在与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.");
}
});
但结果没有显示出来。空控制台。请问,请告诉我我的代码有什么问题,建议更好的建议
答案 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();
}
}
}