Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 GUI和Arduino-从串行数据中提取信息_Java_User Interface_Arduino_Serial Port_Rxtx - Fatal编程技术网

Java GUI和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

我目前在一个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:   ");
 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。您可以将创建的字段指定给您想要的任何变量

    我不确定当变量中有值时,为什么要从控制台提取值

    这有用吗

    如果没有,您能否更具体地说明您的需求,以及为什么希望从控制台中获得价值