2015-05-18 38 views
0

我是另一個新手,試圖完成任務,我需要一些幫助從串行分割字符串。拆分串行字符串-msp430 +處理

我使用eZ430-RF2500無線傳感器監視器的演示代碼,其中我僅更改了接入點溫度的tx(通過評論),目的是僅顯示遠程傳感器的溫度。

該字符串是以下形式:Node:0001, Temp:28.1C, Battery:2.6V, Strenght:031%, RE:no

對於上述顯示的字符串的處理代碼:

import processing.serial.*; 

Serial myPort; 

String sensorReading=""; 

void setup() { 

size(800,600); 

myPort = new Serial(this, "COM7", 9600); 

myPort.bufferUntil('\n'); 

} 

void draw() { 

//The serialEvent controls the display 

} 

void serialEvent (Serial myPort){ 

sensorReading = myPort.readStringUntil('\n'); 

if(sensorReading != null){ 

sensorReading=trim(sensorReading); 

} 

writeText("Sensor Reading: " + sensorReading); 

} 

void writeText(String textToWrite){ 

background(255); 

fill(0); 

text(textToWrite, width/20, height/2); 

} 

我需要字符串以這種方式分割:

Node:0001 

Temp:28.1C 

Battery:2.6V 

Strenght:031% 

RE:no 

我嘗試了一些使用數組(splitTokens(sensorReading,「,」)),charAt()但是println()似乎不起作用的例子,我得到了錯誤disabling serialevent() for com null.

有人會建議我如何解決這個問題?

謝謝。

祝您有美好的一天。

+0

你的問題是關於分割一個字符串,所以你不需要包括任何其他的東西。開始發佈此代碼: void setup(){ String str =「節點:0001,溫度:28.1C,電池:2.6V,功率:031%,RE:否」; } 然後添加您嘗試將字符串拆分爲該代碼以及您收到的錯誤。 –

+0

@George Profenza給你一個關於如何分割字符串的非常好的答案。但是您的錯誤消息提到了Com null。你確定你將硬件分配給了COM7。請查看設備管理器。 –

回答

1

你應該能夠輕鬆地與新行字符替換逗號:

String fromSerial = "Node:0001, Temp:28.1C, Battery:2.6V, Strenght:031%, RE:no"; 
println(fromSerial.replace(", ","\n")); 

分裂和加入也應努力:

String fromSerial = "Node:0001, Temp:28.1C, Battery:2.6V, Strenght:031%, RE:no"; 
println(join(fromSerial.split(", "),"\n")); 

您應該能夠分析數據,一旦你把它分解以及:

String fromSerial = "Node:0001, Temp:28.1C, Battery:2.6V, Strenght:031%, RE:no"; 
String[] data = fromSerial.split(", "); 
try{ 
    for(String s : data){ 
    String[] entry = s.split(":"); 
    String label = entry[0]; 
    float value = 0; 
    if(label.equals("Node")) value = float(entry[1].substring(0)); 
    //etc. 
    } 
}catch(Exception e){ 
    println("error parsing data"); 
} 

try...catch塊應該有助於防止t帽子disabling serialEvent()錯誤信息通常在處理該功能中的串行數據時出現錯誤時發生。

除了分割字符串,我建議處理字符串,如果它不是空:

if (sensorReading != null) { 

    sensorReading=trim(sensorReading); 
    writeText("Sensor Reading: " + sensorReading); 
    } 

快速更新 在解析方面,如果需要保存數據,你實際上可以輕鬆地放置在一個JSON對象的值:

String fromSerial = "Node:0001, Temp:28.1C, Battery:2.6V, Strenght:031%, RE:no"; 
String[] values = fromSerial.split(", "); 
try{ 
    JSONObject data = new JSONObject(); 

    for(String s : values){ 
    String[] entry = s.split(":"); 
    String label = entry[0]; 
    int lastCharIndex = entry[1].length(); 

    if(label.equals("Node")) data.setInt(label,int(entry[1])); 
    if(label.equals("Temp")) data.setFloat(label,float(entry[1].substring(0,lastCharIndex-1))); 
    if(label.equals("Battery")) data.setFloat(label,float(entry[1].substring(0,lastCharIndex-1))); 
    if(label.equals("Strenght")) data.setInt(label,int(entry[1].substring(0,lastCharIndex-1))); 
    if(label.equals("RE")) data.setBoolean(label,entry[1].toLowerCase().equals("yes")); 


    } 

    println(data); 
    saveJSONObject(data,year() + nf(month(),2) + nf(day(),2) + "-" + nf(hour(),2) + nf(minute(),2) + nf(second(),2)+".json"); 

}catch(Exception e){ 
    println("error parsing data"); 
} 

這是一個基本的例子,你會添加數據記錄到JSONArray,並保存在一個文件中的多個條目,而不是許多文件與作爲每個數據錄入。

+0

我用'replaceAll(「,」,「\ n」)',非常感謝你所有的信息。 ! – anirod

+0

不用擔心,隨意投票/標記答案,如果它是有用的;) –