gpt4 book ai didi

java - Java RXTX 与 Arduino 串口通信

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:38 27 4
gpt4 key购买 nike

我正在尝试使用串行端口在我的 PC(使用 Netbeans 和 RXTX 的 Windows 7)与 Arduino Pro 之间进行通信。 Arduino 实际上是使用 FTDI 电缆连接到 PC 的。

代码是基于Java的SimpleRead.Java找到的here.

目前,Arduino 在启动时只是简单地打印出一个字符串。我的 Java 程序应该打印已读取的字节数,然后打印出内容。 Java 程序可以工作,有点......

如果字符串很长(>10 个字节左右),输出将被分解。

所以如果我在 Arduino 上打印

Serial.println("123456789123456789"); //20 bytes including '\r' and '\n'

我的 Java 程序的输出可能类似于:

Number of Bytes: 15   
1234567891234
Number of Bytes: 5
56789

Number of Bytes: 12   
1234567891
Number of Bytes: 8
23456789

我认为这是一个计时问题,因为当我使用调试器手动检查代码时,结果字符串始终是它应该的样子:一个 20 字节的字符串。

我一直在搞乱各种事情,但我一直无法解决问题。

这是给我带来问题的代码部分:

static int baudrate = 9600,
dataBits = SerialPort.DATABITS_8,
stopBits = SerialPort.STOPBITS_1,
parity = SerialPort.PARITY_NONE;

byte[] readBuffer = new byte[128];

...
...

public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {

try {
if (input.available() > 0) {
//Read the InputStream and return the number of bytes read
numBytes = input.read(readBuffer);

String result = new String(readBuffer,0,numBytes);
System.out.println("Number of Bytes: " + numBytes);
System.out.println(result);
}
} catch (IOException e) {
System.out.println("Data Available Exception");
}
}

最佳答案

串行数据只是一种数据流。根据您读取它的时间和正在发生的缓冲,当您读取它时可能只有部分数据可用。

由于您使用的是面向行的数据,因此您要做的是缓冲数据,直到看到行终止符,然后才处理数据。

关于java - Java RXTX 与 Arduino 串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009173/

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