Я использую BufferedReader для чтения данных с USB-шлюза, который периодически получает сетевые кадры ZigBee с устройства Arduino.BufferedReader пропускает случайные символы при чтении с USB
Это то, что кадр должен выглядеть следующим образом:
~f�}3�@v<-,R#}3�@v<--mac:0013A20040763C2D -H:-25.80 -T:22.58 -L:2.6451 -N:100.00 -D:0.0290 -B:35
Но вместо этого, это всегда не хватает некоторых символов ближе к концу адреса MAC, например, так:
~f�}3�@v<-,R#}3�@v<--mac:0013A2004076D -H:-25.80 -T:22.58 -L:2.6451 -N:100.00 -D:0.0290 -B:35
Или
~f�}3�@v<-,R#}3�@v<--mac:0013A2004076C2:-25.80 -T:22.58 -L:2.6451 -N:100.00 -D:0.0290 -B:35
Мусор в начале представляет собой информацию о сетевом заголовке низкого уровня, я думаю.
я на Ubuntu, и кадры показывают, прекрасно при чтении из терминала, используя
cat /dev/ttyUSB0
Код, я использую для чтения из порта USB выглядит следующим образом. Он работает в своей теме.
public void run() {
Boolean keepRunning = true;
BufferedReader br = new BufferedReader(new InputStreamReader(portReader.getInputStream()));
String line;
while (keepRunning) {
try {
while ((line = br.readLine()) != null) {
handleData(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Я использую RXTXcomm.jar, доступный здесь http://rxtx.qbang.org/wiki/index.php/Main_Page
Это где я открыть порт.
while (!connected && !timedOut) {
System.out.print("\n\nConnecting to " + portName);
//Open Ports
CommPort commPort = portIdentifier.open(this.getClass()
.getName(), 9600);
//TODO Should we rule out other kinds?
if (commPort instanceof SerialPort) {
//Pass the open port
SerialPort serialPort = (SerialPort) commPort;
serialPort.enableReceiveTimeout(15000);
//Configure the port communication interface
serialPort.setSerialPortParams(bauds,
SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//Open a stream and read from the port
inputStream = serialPort.getInputStream();
int portBuffer = inputStream.read();
//Check if there is something in the buffer, which
//means that a connection was established
if (portBuffer > -1) {
connected = true;
} else {
System.err.println("Connection to " + portName
+ " timed out");
serialPort.close();
inputStream.close();
timedOut = true;
}
} else {
System.err
.println("Error: Only serial ports are handled by this application.");
}
}
Любые идеи о том, что может произойти неправильно?
Всегда ли это два конкретных выхода или он отличается? – Zyerah
Он изменяется, по-видимому, случайным образом. Тем не менее, это всегда некоторые персонажи в одной позиции. – broncoAbierto
Это интересно. Не такое поведение, которое я ожидал бы от последовательного соединения. Попробуйте распечатать строки как массивы в двоичном формате? Мне любопытно, есть ли какие-то шаблоны. (Кроме того, вам, возможно, придется использовать @Telthien, чтобы уведомить меня, не знаю, почему, но стандартное уведомление не запускалось) – Zyerah