我有一个 CyberGlove 通过串口连接到 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) 如何从二进制命令中获取读数?这是我真正想要获得的。