我有一个通过串口连接到Matlab的CyberGlove。我正在尝试编写一个请求数据样本的命令,然后再读取样本。
我已使用以下代码成功连接手套:
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)
然后我得到字符串输出'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)如何从二进制命令中读取数据?这就是我真正想要获得的。
答案 0 :(得分:1)
找出问题所在:
发生超时是因为它没有获得与预期一样多的字节,并且它期望错误的数字。默认情况下,get(s, 'InputBufferSize')
返回512,而实际数据为24字节。在调用fopen(s)
之前,我刚刚运行set(s, 'InputBufferSize', 24);
并从我期望的二进制读/写中获得了正确的24位8位整数,没有超时。