【问题标题】:Java GUI and Arduino - Extract Information from SerialJava GUI 和 Arduino - 从串行中提取信息
【发布时间】:2016-02-23 19:49:42
【问题描述】:

我目前正在从事一个 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 网站http://playground.arduino.cc/Interfacing/Java 上的 Java 文档,我能够设置 Rx 和 Tx 库。而且我还能够从 Java 控制台中的串行端口获取数据。我现在需要做的是从控制台中提取该信息并将其显示在 GUI 上。

在 Java 控制台中我有:

传感器 1 上的电压为:X
传感器 2 上的电压为:Y 传感器 3 上的电压为:Z
传感器 4 上的电压为:W
传感器5上的电压为:A

我需要将 X、Y、Z、W 和 A 的值分别放在不同的 JTextField 上

感谢您的帮助

【问题讨论】:

    标签: java user-interface arduino serial-port rxtx


    【解决方案1】:

    查看您的示例输出数据:

    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 类应该很简单:

    1. 使用indexOf()获取最后一个“:”字符
    2. 使用substring() 截断字符串的最后一部分
    3. 使用trim()清除空格

    这是一个基本的例子:

    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 行中。

    类似的东西:

    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 或更高版本)中,您应该能够使用 Tools > Serial Plotter

    此外,如果您不拘泥于原始 java 和 swing 组件,您可能需要查看Processing,它是Serial library

    【讨论】:

      【解决方案2】:

      我不太清楚你的问题的具体细节,但我没有足够的评论点,所以我会至少回答一部分。

      new JTextField(Float.toString(volt1));
      

      将使用电压值创建一个 JTextField。您可以将创建的字段分配给您想要的任何变量。

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

      这有帮助吗?

      如果没有,您能否更具体地说明您的要求以及为什么要从控制台获取价值?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 1970-01-01
        • 2014-10-25
        相关资源
        最近更新 更多