簡體   English   中英

Java GUI和Arduino-從串行中提取信息

[英]Java GUI and Arduino - Extract Information from Serial

我目前在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/Interface/Java上的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類應該很簡單:

  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及其序列庫

對於您的問題,我不太清楚,但是我沒有足夠的意見要發表,所以我將至少回答一部分。

new JTextField(Float.toString(volt1));

將使用電壓值創建一個JTextField。 您可以將創建的字段分配給所需的任何變量。

我不確定在變量中有值時為什么要從控制台中提取值。

有幫助嗎?

如果不是,您能否更具體地說明您的要求,以及為什么要從控制台獲取價值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM