如何在MATLAB中格式化从串行端口读取的数据?

时间:2009-11-24 17:56:15

标签: matlab serial-port

我正在尝试通过MATLAB将数字传感器连接到我的电脑。

我首先向传感器发送数据请求,然后传感器回复六字节流。

MATLAB读取传感器:

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

我确切知道数据的内容应该是什么,但我不知道如何读取MATLAB生成的数据包中的数据。

数据包(data1)只是6个字节,但如何以整数形式访问每个元素?

我之前从未接触过MATLAB编程,所以我有点迷失。

附带问题: MATLAB的数据格式%c%s%c\n%s\n是什么意思?我试着寻找它,但我找不到任何东西。

2 个答案:

答案 0 :(得分:4)

格式说明符%c表示FSCANF正在读取六个字符。您应该能够使用DOUBLE函数将这些字符转换为整数值:

data1 = double(data1);

现在data1应该是包含整数值的六元素数组。您可以通过indexing into the array

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

如果要在data1中组合值对,使得一个值代表数字的最高8位而一个值代表最低的8位,则以下内容应该有效:

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

以上使用data1(1)作为高位,data1(2)作为低位,然后将结果转换为INT16类型。您也可以不使用对INT16的调用,只将结果保留为DOUBLE类型(它存储的仍然是整数)。

格式说明符%s用于读取字符串,直到遇到空格为止。格式说明符在我上面链接的FSCANF文档中讨论。

答案 1 :(得分:0)

你可以使用来自MATLAB File Exchange的AJ Johnson的cstruct。这允许您指定与您的字符包对应的C语言数据结构。然后,一个函数调用将字符(字节)转换为MATLAB数据类型。如果数据格式发生变化,这是快速且可维护的。