2009-11-24 60 views
3

我試圖通過MATLAB將數字傳感器連接到我的電腦。如何格式化從MATLAB串口讀取的數據?

我首先發送一個數據請求到傳感器,然後傳感器回覆一個六字節的數據流。

MATLAB讀取這樣的傳感器:

data1 = fscanf(obj1, '%c', 6); 

我確切知道數據的內容應該是,但我不知道如何在MATLAB中產生的數據包讀取數據。

數據包(data1)只是6個字節,但是如何以整數形式訪問每個單獨的元素?

我從來沒有碰過MATLAB編程,所以我有點迷路。

方問題:什麼MATLAB的數據格式%c%s%c\n%s\n是什麼意思?我試圖尋找它,但我找不到任何東西。

+0

我很想知道'data1'中有什麼樣的例子。如果在命令窗口中鍵入'disp(data1)',它會顯示什麼? – gnovice 2009-11-24 18:36:21

回答

4

格式說明符%c表示FSCANF正在讀取六個字符。你應該能夠將這些字符轉換爲使用DOUBLE功能整數值:

data1 = double(data1); 

現在data1應該是包含整數值的六元素的數組。如果你想在data1這樣一個值代表一個數的高8位和一個值表示最低8個比特,下面應該工作對值的組合

a = data1(1); %# Gets the first value and puts it in a 

:您可以通過indexing into the array訪問每個:

a = int16(data1(1)*2^8+data1(2)); 

上述用途data1(1)作爲高比特和data1(2)作爲低比特,然後將結果轉換爲一個INT16類型。您也可以將呼叫保留爲INT16,只將結果保留爲DOUBLE類型(其存儲的仍然是整數)。

格式說明符%s用於讀取字符串,直到遇到空格爲止。格式說明符在我鏈接到上面的FSCANF的文檔中討論。

+1

很好,非常感謝!一旦我把它全部運行起來,最好的投票。 – Faken 2009-11-24 18:10:49

+0

對不起還有一個問題:如果6個數據包中的數據實際上是一個2字節整數的三元組,那麼我該如何轉換?我認爲價值已經簽署了。 – Faken 2009-11-24 18:12:04

+0

那麼,'data1'中是否有6個值,並且您想將每個對分組爲2個字節的整數? – gnovice 2009-11-24 18:14:38

0

您可以使用來自MATLAB File Exchange的AJ Johnson的cstruct。這允許您指定與您的字符包對應的C語言數據結構。然後一個函數調用將字符(字節)轉換爲MATLAB數據類型。如果數據格式發生變化,這是快速和可維護的。