gpt4 book ai didi

java - 我是否使用 jSerialComm 以错误的方式读取 Arduino 传入数据?

转载 作者:行者123 更新时间:2023-12-01 17:51:14 27 4
gpt4 key购买 nike

我正在编写一个必须与我的 Arduino UNO 通信的 JavaFX 应用程序。为此,我使用 jSerialComm 库。

出于测试目的,我将一个非常简单的草图上传到我的 Arduino,每 2 秒向串口打印一个“Hello”字样:

void setup() {
//put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
delay(2000);
Serial.print("Hello");
}

在我的 JavaFX 场景中,我使用以下命令读取传入数据:

public void setDevice(SerialPort device) {
this.device = device;
device.openPort();
device.addDataListener(new SerialPortDataListener() {
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
}

@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
if (serialPortEvent.getEventType() == SerialPort.LISTENING_EVENT_DATA_RECEIVED){
byte [] data = serialPortEvent.getReceivedData();
String msg = new String(data);
System.out.println(msg);
}
}
});
}

我可以从 Arduino 读取数据,但它的读取方式很奇怪。就像字符串以 2 个不同的字符串发送一样。这是控制台输出的图像:

Console Output

我做错了什么吗?非常感谢!

最佳答案

您正在默认 = NonBlocking 模式下使用 jSerialComm。那么会发生什么(作为伪代码步骤)

 LISTENING_EVENT_DATA_RECEIVED triggered
get the char H
get the char e
Because we are nonBlocking we have to move on in the program
Print what we have so far -> HE
.... do other stuff or check if other stuff has to be processed
LISTENING_EVENT_DATA_RECEIVED triggered
get the char L
get the char L
get the char O
Because we are nonBlocking we have to move on in the program
Print what we have so far -> LLO
.... do other stuff or check if other stuff has to be processed

所以你可以做两件事 -> 将模式更改为例如接收时阻塞(确保适当的超时以防止死锁)或重写函数(我的首选方式)以检查通信流中的结束符,然后处理缓冲区的内容(应以非阻塞方式实现)

关于java - 我是否使用 jSerialComm 以错误的方式读取 Arduino 传入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792397/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com