Java GUI和Arduino-从串行数据中提取信息
我目前在一个Arduino项目中工作。其中我需要读取5个模拟传感器 每个传感器的arduino代码非常简单。但事实是:Java GUI和Arduino-从串行数据中提取信息,java,user-interface,arduino,serial-port,rxtx,Java,User Interface,Arduino,Serial Port,Rxtx,我目前在一个Arduino项目中工作。其中我需要读取5个模拟传感器 每个传感器的arduino代码非常简单。但事实是: void setup() { Serial.begin(9600); } void loop() { int sensor1 = analogRead(A0); float volt1 = sensor1 * (5.0 / 1023-0); Serial.print("The voltage on the sensor 1 is: "); Seri
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensor1 = analogRead(A0);
float volt1 = sensor1 * (5.0 / 1023-0);
Serial.print("The voltage on the sensor 1 is: ");
Serial.println(volt1);
}
使用Arduino网站上的Java文档,我能够设置Rx和Tx库。我还能够从Java控制台的串行端口获取数据。我现在需要做的是从控制台提取这些信息,并将其显示在GUI上
在Java控制台中,我有:
传感器1上的电压为:X传感器2上的电压为:Y 传感器3上的电压为:Z
传感器4上的电压为:W
传感器5上的电压为:A 我需要把X,Y,Z,W和A的值分别放在不同的JTextField上
感谢您提供帮助查看示例输出数据:
The voltage on the sensor 1 is: X
The voltage on the sensor 2 is: Y
The voltage on the sensor 3 is: Z
The voltage on the sensor 4 is: W
The voltage on the sensor 5 is: A
听起来您只需要获取:
字符后面的数据,然后删除值周围的空白,这样就可以将其解析为浮点值。
使用String类应该很简单:
String stringFromSerial = "The voltage on the sensor 1 is: X";
String valueString = stringFromSerial.substring(stringFromSerial.lastIndexOf(":")+1).trim();
System.out.println(valueString);
如果它符合您的要求,您可以将其封装在函数中:
float extractFloat(String serialMessage){
float result = Float.NaN;
try{
result = Float.parseFloat(serialMessage.substring(serialMessage.indexOf(":")+1).trim());
}catch(Exception e){
System.err.println("Oh-oh! Something went wrong trying to convert " + serialMessage);
e.printStackTrace();
}
return result;
}
我不确定是否值得发送这么多字符。
您可能需要考虑发送逗号分隔的值,如CSV行。< /P>
大致如下:
Serial.print(volt1);
Serial.print(",");
Serial.print(volt2);
Serial.print(",");
Serial.print(volt3);
Serial.print(",");
Serial.print(volt4);
Serial.print(",");
Serial.println(volt4);
这样做的好处是,在较新版本的Arduino(1.6.6版或更高版本)中,您应该能够使用工具>串行绘图仪
此外,如果您不太喜欢原始java和swing组件,您可能想查看一下,我不太清楚您问题的具体内容,但我没有足够的要点来评论,所以我将至少回答部分问题
new JTextField(Float.toString(volt1));
将创建一个带有电压值的JTextField。您可以将创建的字段指定给您想要的任何变量
我不确定当变量中有值时,为什么要从控制台提取值
这有用吗
如果没有,您能否更具体地说明您的需求,以及为什么希望从控制台中获得价值