Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从串行端口读取将产生拆分字符串_Java_Arduino_Jssc - Fatal编程技术网

Java 从串行端口读取将产生拆分字符串

Java 从串行端口读取将产生拆分字符串,java,arduino,jssc,Java,Arduino,Jssc,我使用JSSC类从Arduino Uno接收字符串。Arduino通过COM3连接到我的电脑。在Arduino上的setup void中,它向java程序发送一个字符串,表示Arduino已准备好读取串行数据。当java程序读取串行端口时,它会将Arduino中的字符串拆分为多行,其中包含空格。我猜想java程序在收到数据时正在打印数据,而不是等待完整的字符串。如何使程序从Arduino读取字符串并将其保存为字符串,然后将其打印到控制台 爪哇: 阿杜伊诺: String input; void

我使用JSSC类从Arduino Uno接收字符串。Arduino通过COM3连接到我的电脑。在Arduino上的setup void中,它向java程序发送一个字符串,表示Arduino已准备好读取串行数据。当java程序读取串行端口时,它会将Arduino中的字符串拆分为多行,其中包含空格。我猜想java程序在收到数据时正在打印数据,而不是等待完整的字符串。如何使程序从Arduino读取字符串并将其保存为字符串,然后将其打印到控制台

爪哇:

阿杜伊诺:

String input;

void setup() {
  Serial.begin(9600);
  Serial.print("Arduino Ready");
}

void loop() {

}
这是控制台输出的内容:

      Ard
uino
 Rea
dy
无法从控制台输出复制Ard前面的空格。 有没有办法让我在一条线上完成这一切? 我将来可能还需要从Arduino接收数据。
谢谢。

使用开始和结束标记,如Arduino Ready$

其中,$表示您感兴趣的字符串的开始和结束。然后,您可以使用它们来处理接收到的字节,并根据标记存储它们

看看这个

我可能对代码完全错误[我是java中的一个十足的noob],但我认为您可以理解整个想法

串行事件方法应该如下所示

if (event.isRXCHAR() && event.getEventValue() > 0) {
    try {
        char receivedData = serialPort.read(event.getEventValue());
        if (recvData) === '#' {
            this.readString = 1
        }else if(recvData === '$'){
            this.readString = 0
        }

        if(this.readString == 1){
            this.recvStringData.append(receivedData)
            System.out.println(this.recvStringData);
        }

        if(this.recvStringData == "Arduino Ready") JTAC.ready = true;

    } catch (SerialPortException ex) {
        System.out.println("Error in receiving string from COM-port: " + ex);
    }
}
而Arduino代码将是

void setup(){
   Serial.begin(9600);
   while(!Serial);
}

void loop(){
    Serial.println("#Hi There$");
}

你能把所有的数据都存储在一个缓冲区中并从那里格式化吗?永远不要将字符串与==@GyroGearless进行比较。那么我该如何比较字符串呢?检查编辑后的答案。我不确定代码是否正确,但我想你明白了
void setup(){
   Serial.begin(9600);
   while(!Serial);
}

void loop(){
    Serial.println("#Hi There$");
}