在Processing中,使用串口,​​为什么.equals没有返回true?

时间:2015-07-26 03:47:47

标签: processing arduino-uno

我使用Processing来显示进入串口的数据。 我有简单的字符串值进入串口。

我将所有代码都删减到了这个基本的失败点,我无法理解为什么它会失败。 if语句永远不会计算为true。(我不是要将字符串与=或==进行比较)

如果您知道为什么会这样,请帮忙:)我真的很感激答案。

然后,好吧,因为我没有10的声誉,我不会发布有用的截图。 这是失败的代码:

    enter code here
import processing.serial.*;
Serial myPort;

String val;  //Data recieved from the serial port

void setup() {
  size(400,300);

  String portName = Serial.list()[2]; //change the 0 to a 1 or 2 etc. to match your port //1 or 2  for USB on the Mac
  myPort = new Serial(this, portName, 9600); 
  myPort.bufferUntil('\n');
}



void serialEvent (Serial myPort){
 val = myPort.readStringUntil('\n');
 print(val);
  if(val != null){   
    if(val.equals("New sample set")){
      print("yes\n");
    } else {
      print("not equal\n");
    }

  }
}


void draw() {
  //The serialEvent controls the display
}  

我已经尝试取出空格并只制作一个字母,但这没有帮助。我尝试过使用if(val.equals(“New sample set”)== true),但这也无济于事。

1 个答案:

答案 0 :(得分:3)

好的,它只花了几个小时,但我已回答了我自己的问题:)

是的,比较字符串必须使用.equals()是的,必须修剪它们,以便消除所有换行符。

我错误地使用了修剪。 简单地说myString.trim();不行。 这会返回一个字符串,所以它需要放在某处;这是如何做: 的myString = myString.trim();

我知道,对于有经验的编码员来说,这是显而易见的,但我只是看不到它。而且我认为bufferUntil('\ n')只会在\ n之前缓冲这些东西...我猜不是。 希望我在这个愚蠢的小“boggle”中度过的时光可以帮助别人! :) 快乐的编码!!!

下面成功处理代码:

import processing.serial.*;
Serial myPort;

String val;  //Data recieved from the serial port

void setup() {
  size(400,300);
  
  String portName = Serial.list()[2]; //change the 0 to a 1 or 2 etc. to match your port //1 or 2  for USB on the Mac
  myPort = new Serial(this, portName, 9600); 
  myPort.bufferUntil('\n');
}


void serialEvent (Serial myPort){
 val = myPort.readStringUntil('\n');
 print("After reading serial, val is "+val+".\n");
 val=val.trim();
 print("After trimming, val is "+val+".\n");
  if(val != null){   
     print("After comparing to null, val is "+val+".\n");
    if("N".equals(val)){
      print("yes\n");
    } else {
      print(val+" is not equal to \"N\".\n");
    }

  }

}


void draw() {
  //The serialEvent controls the display
}