【发布时间】:2013-10-30 17:14:13
【问题描述】:
我有一个 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)
然后我得到字符串输出'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) 如何从二进制命令中获取读数?这是我真正想要获得的。
【问题讨论】:
-
这听起来更像是设备的通信协议问题,而不是 Matlab 问题。
-
那么,看来我应该用别的东西来测试它,然后呢?有没有我可以使用的简单命令行方法?
-
好问题...不确定这是否是最好的方法,但我想您可以使用
cat /dev/ttyS0阅读和printf ... > /dev/ttyS0写作。 printf 是内置的 bash。但我建议的第一件事是检查设备的文档,看看你是否了解所有内容。
标签: matlab serial-port