Я работаю над проектом, где я получаю сенсорные данные на Arduino
, который печатает его по серийному номеру на моем ноутбуке. Когда я использую Arduino IDE, это отлично работает с Serial Monitor. (Полные сообщения выглядят так: 1-35 251 58 152
). Символы после -
являются UID, поэтому они всегда должны быть такими же, как я только тестирую на одном устройстве.Пытается прочитать данные по последовательному со сканером, не читает полную строку
Когда я пытаюсь прочитать это через Java, я получаю разные сообщения (или, по крайней мере, не полные).
public void setupUSB() {
SerialPort ports[] = SerialPort.getCommPorts();
for (SerialPort port : ports) {
if (port.getSystemPortName().equals("COM6")) myPort = port; // using LoRa over USB
}
myPort.setBaudRate(38400);
myPort.openPort();
myPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
}
Метод выше инициирует порт USB, который я использую. После некоторых проверок я пытаюсь прочитать порт следующим образом (удаленный try catch и другой неважный код на этот вопрос).
Scanner data = new Scanner(myPort.getInputStream()).useDelimiter("\n");
if (data.hasNext()) {
String line = data.next();
System.out.println("readUSB: " + line);
}
Я также попытался следующие:
Scanner data = new Scanner(myPort.getInputStream());
if (data.hasNextLine()) {
String line = data.nextLine();
System.out.println("readUSB: " + line);
}
Результаты, которые я получаю от System.out.println("readUSB: " + line);
являются следующие:
readUSB: �
readUSB: 152
readUSB: 9-35 251 58 152
readUSB: 152
readUSB: 1-35 251 58 152
readUSB: 5 251 58�152
readUSB: 251 58 152
readUSB:
readUSB: 58 152
Как вы видите (есть некоторый шум в сообщениях), большинство из этих сообщений не завершены.
Может ли кто-нибудь сказать мне, что вызывает это и как его исправить?
[EDIT]
Как я использую LORA для передачи данных от одного датчика к другому Arduino, я сбор данных в виде символов. Оба порта Arduino и моего USB-устройства используют тот же baudRate по адресу 38400
. Я чувствую, что ошибка может быть в коде ниже, так как когда я подключаю датчик USB (вместо отправки его через LoRa), значения действительно правильные.
if (packetFound) {
// Print the packet over Serial per character
Serial.println();
for (int i=0; i<19; i++) { //20 and 21 are squares
Serial.print(char(RxData[i]));
RxData[i] = 0x00; // Clear buffer [0x20 -> space]
}
}
Довольно тривиальный вопрос, но я должен спросить его, извините. Вы уверены, что бодраты соответствуют? P.S. Пожалуйста, добавьте код arduino –
Используете ли вы подходящую кодировку? –
Почему бы не использовать 'InputStream' для чтения данных из серийного номера? Два полезных ресурса, связанных с 'InputStream': 1. http://stackoverflow.com/questions/336714/reading-serial-port-in-java 2. http://www.java-samples.com/showtutorial.php? tutorialid = 11 –