如果使用Arduino IDE的串行监视器,我可以读取一对逗号分隔的值,如下所示:
我想首先在SciLab终端中复制此行为。我使用了Serial Communication Toolbox:
h = openserial(7, "9600,n,8,1") // open COM7
disp(readserial(h))
closeserial(h)
返回空或
169
228,179
228,
228,205
228,209228,
将disp(readserial(h))
放入while循环也无济于事。不仅有太多的空行,如果我停止while循环,它也不会关闭端口(我认为应该使用try-catch之类的东西)。如果您能帮助我知道如何获得与Arduino的串行监视器相同的行为,我将不胜感激。
PS 。接下来,我想实时绘制这两个值。因此,也许可以使用csvTextScan
函数将字符串分成两个整数。
答案 0 :(得分:0)
好吧,经过几天的苦苦挣扎,我发现了这一点。事实证明SciLab不具有本机串行通信功能,并且Toolbox开发人员已使用TCL_EvalStr
在外部运行Tcl命令。我必须深入研究Tcl串行通信语法(即read
,open
,gets
,fconfigure
...),询问another question,得到{{ 3}},最后为工具箱提供了一个新功能,我已将其提交为some help:
function buf = readserialline(h)
tmpbuf = emptystr();
while tmpbuf == emptystr()
TCL_EvalStr("gets " + h + " ttybuf");
tmpbuf = TCL_GetVar("ttybuf");
end
buf = tmpbuf;
endfunction
现在可以通过运行以下行为来达到上述目的:
h = openserial(7, "9600,n,8,1") // open COM7
for ii = 1:40
disp(readserialline(h))
end
closeserial(h)
逐行读取串行端口并将其打印到SciLab控制台。现在要解析CSV数据,您可以使用:
csvTextScan(part(readserialline(h), 1:$-1), ',')
P.S.1。我在SimulIDE中使用了一个虚拟Arduino板,并使用com0com创建了虚拟串行端口。更多信息。
P.S.2。。与Toolbox开发人员Aditya Sengupta here on SourceForge的更多讨论。
P.S.3。在here on Twitter
上有更多讨论P.S.4。。完整的演示以及说明Tcl Google group
P.S.5。。对于那些可能会在这里生活的人,我决定对Aditya Sengupta的存储库here on Reddit进行一些改进。