[英]read from a serial port using even listener in a loop
我有一種方法可以將文件的內容寫入串行端口,然后等待確認消息。 我正在嘗試使用均勻的偵聽器,但是沒有消息打印回控制台。 但是,當我以慢速手動讀取沒有事件監聽器的消息時,消息又回來了。 這是我的代碼:
public class portConnector {
private static SerialPort SP;
public portConnector(String pName){
SP = new SerialPort(pName);
}
public static byte[] read(String name) throws IOException{
File file = new File(name);
byte[] bytes = new byte[(int) file.length()];
FileInputStream inputStream = new FileInputStream(file);
inputStream.read(bytes);
inputStream.close();
return bytes;
}
public void push2rec (File[] LOF){
try {
SP.openPort();
SP.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
int mask = SerialPort.MASK_RXCHAR;
SP.setEventsMask(mask);
SP.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
for (File f : LOF){
byte[] rd = read(f.getName());
SP.writeBytes(rd);
}
SP.closePort();
}
catch (SerialPortException ex) {System.out.println(ex);}
catch (IOException ex) {System.out.println(ex);}
}
private static class PortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() == 10) {
try {
byte[] buffer = SP.readBytes(10);
for (byte b : buffer){
System.out.format("%02X ", b);
}
System.out.println("");
}
catch (SerialPortException ex) {
System.out.println("Error in receiving string from COM-port: " + ex);
}
}
}}}
的“ addEventListener”位於正確的位置嗎? 誰能幫助我解決這個問題。 任何幫助,將不勝感激。 謝謝。
串行接收事件第一次觸發時,它很可能只有一個字符,因為成千上萬的指令在單個字符時間內執行。
您需要將每個事件的字符捕獲到緩沖區變量中,直到找到所需的10個字符為止。
您還必須將接收事件與發送的第一個字符同步。 這就是為什么大多數串行通信都以CR或某些其他已知字符終止的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.