[英]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.