2012-05-29 52 views
0

我一直在爲Java應用程序編寫應用程序的代碼,即與外部設備Uc連接,該應用程序從ADC的多個通道採樣,並將它們發送迴應用程序進行處理和繪圖。我的問題是,我不知道如何對與每個採樣通道相對應的採樣數據進行排序和存儲以供後期處理,因爲我無法一次繪製來自3個不同通道的所有數據。任何建議將不勝感激!來自uart的數據處理

+0

該發送的uC通過串行測量ADC樣本端口,你不知道「哪些數據來自哪個通道」。那是對的嗎? – sithereal

+0

不,我知道哪個頻道的數據來自哪裏,因爲我將不同的ID分配給了不同的頻道,但是我在收到的樣本中存在問題。我可以用單聲道來做,但是當你有多個頻道時,你需要提取所有樣本並存儲到每個頻道,然後一次繪製一個樣本,然後增加圖形的可用時間,以便圖形移動很長時間,如實時圖形監控類系統。這是我似乎無法找到解決方案的部分。感謝您的回覆! – user1423481

回答

0

1)創建一個全局的int變量(比如說int eventTimer)並創建一個計時器,該計時器將擁有自己的線程,該計時器會在每個計時器計時器上增加此事件計時器。根據採樣率設置定時器週期。

2)創建一個映射爲每個通道存儲「閱讀時間和閱讀價值」,如:

Map<int, float> readingsFromChannel1 = new HashMap<int, float>(); 

,每當你從信道接收新的閱讀,它追加到它的地圖,如:

float value; // the value that you just get from channel 1 
readingsFromChannel1.put(eventTimer, value); 

3)中的曲線圖的繪圖功能:

// drawing of channel1 data: 
iterator it = readingsFromChannel1.iterator(); 
while(it.next()) 
{ 
    Map.Entry m =(Map.Entry)it.next(); 
    int key=(Integer)m.getKey(); 
    float value=(float)m.getValue(); 
    // I assume that you have a putpixel(x,y) method for drawing: 
    putPixel(key - eventTimer, value); 
} 
+0

我會試試這個。謝謝。 – user1423481

+0

所以這可以用於多個渠道,比如同時進行圖表分析,不是嗎?如果它的大小不一樣,那麼你將如何在同一時間迭代通道的不同映射。 – user1423481

+0

是的,它應該可以使用多個通道。既然你在循環中調用了it.next(),你不需要知道大小。 – sithereal