我使用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),但这也无济于事。
答案 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
}