0

我有一个 Cyber​​Glove 通过串口连接到 Matlab。我正在尝试编写一个请求数据样本的命令,然后再读回样本。

我已经使用以下代码成功连接了手套:

s = serial('/dev/ttyS0')
set(s,'BaudRate',115200)
fopen(s)

然后我可以写入/读取以二进制或 ascii 格式获取传感器信息。

在二进制中,我正在做:

fwrite(s,'G')
fread(s)

fread总是超时然后吐出一个看似随机长度(1-100+)的列向量,其中包含无意义的整数。

使用 ASCII,命令是:

fprintf(s,'g')
fscanf(s)

这给出了一个空字符串作为读出值。我知道手套正在获取并且至少在某种程度上处理命令,因为如果我给它一个无效的命令,我会收到错误消息e?

不过,这确实让我感到困惑:我无意中发现了一种从手套中获得正确读数的方法。

fread(s)(超时并给出看似随机的输出)

fprintf(s,'g')

fscanf(s)

然后我得到字符串 output 'g 1 76 93 113 89 42 20 77 98 106 117 81 62 23 52 60 34 68 57 254 92 26',这是正确的。

我的问题是:

(1) 为什么最后一部分会产生正确的响应?

(2) 如何从二进制命令中获取读数?这是我真正想要获得的。

4

1 回答 1

1

找出问题所在:发生超时是因为它没有像预期的那样返回尽可能多的字节,并且它期待的数字不正确。默认情况下,get(s, 'InputBufferSize')返回 512,而实际数据为 24 字节。在调用之前fopen(s),我只是运行set(s, 'InputBufferSize', 24);并从我期望的二进制读/写中获得了正确的 24 个 8 位整数,没有超时。

于 2013-10-30T09:14:13.800 回答