我有一个 Adruino Uno 板。从它,通过串行,我将数据 ( if(Serial.available()) => delay(100) => Serial.write("Hello, World!")) 传输到 Java 程序读取的 COM 端口。我附上代码。
问题:程序从端口读取错误。例如,我发送“Hello, World!” - 来了“瞧,世界!” ,“天哪!” ,“天!天!” 等等。我将不胜感激在正义的道路上的指示。阿门。
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;
public class Main {
public static void main(String[] args) {
// Метод getPortNames() возвращает массив строк. Элементы массива уже отсортированы.
/* Получение имён последовательных портов*/
System.out.println("Port searching...");
System.out.println("Find ports: ");
String[] portNames = SerialPortList.getPortNames();
for(int i = 0; i < portNames.length; i++){
System.out.println(portNames[i]);
}
//В конструктор класса передаём имя порта с которым мы будем работать
SerialPort serialPort = new SerialPort("COM3");
//Открываем порт
try {
serialPort.openPort();
//Выставляем параметры. Можно использовать и такую строку serialPort.setParams(9600, 8, 1, 0);
serialPort.setParams(SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//Записываем данные в порт
serialPort.writeString("Test");
// Лучше использовать его совместно с интерфейсом SerialPortEventListener.
System.out.println("Getting answer from device...");
String buffer = serialPort.readString();
System.out.println(buffer);
//Закрываем порт
serialPort.closePort();
} catch (SerialPortException e) {
e.printStackTrace();
}
}
}
用 Arduino 的 loop() 函数编写的代码在循环中被调用。因此,一旦 Serial.available() 条件被触发,那么每 100 毫秒您就会调用一次 Serial.write("Hello, World!")。