2009-11-24 140 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数据类型。如果数据格式发生变化,这是快速和可维护的。