【问题标题】:Matlab serial interface with Arduino is very slowMatlab与Arduino的串行接口很慢
【发布时间】:2014-10-27 00:28:01
【问题描述】:

我正在尝试在 Matlab 中与 Arduino 板建立串行链接。从板上读取数据进展顺利。但是,对于我发送的每个信息块,将数据写入电路板大约需要一秒钟。

我正在运行写入数据的代码:

s = serial(comprt,'BaudRate',9600,'DataBits',8);
fopen(s);
fprintf(s, '%c', 'c');
fprintf(s, '%u %u %u %u \n', [A B C D]);
pause(1);
fprintf(s, '%c', 'a');
pause(1);

A、B、C、D 是 0 到 255 之间的任意 8 位数字,“c”和“a”是字符命令,它们在 Arduino 板上执行操作并利用板上的固件。

如果我不包括 pause(1) 命令,那么当我没有停止 Matlab 执行下一个命令至少一秒钟时,串行信息不会通过。

谁能帮我加快向串口写入内容的速度?我检查了 Arduino 编辑器,当我通过他们的界面输入等效命令时,一切都很好。所以延迟与 Arduino 板或设备驱动程序无关,它肯定是在 Matlab 方面。

【问题讨论】:

  • 尝试在打开连接后立即添加 2 秒延迟。这可以让您消除其他延迟。
  • 亲爱的无花果,非常感谢。打开序列后,我确实等了一会儿,我担心这不是问题。根据一些故障排除,我只是显示了问题所在的关键命令。

标签: matlab interface serial-port arduino


【解决方案1】:

我已经在 Arduino 中使用了相当多的 MATLAB。例如:见这里 (http://www.instructables.com/id/Arduino-to-MATLAB-GUI-Live-Data-Acquisition-Plotti/) [见我的 GitHub Arduino 和 MATLAB 代码的教程链接] 和这里 (https://www.youtube.com/watch?v=wY3oh2GIfCI)。

我相信你的问题出在你的 Arduino 方面。

将此行添加到您的 setup() 函数中:

Serial.setTimeout(100); //this will make the Arduino wait a max of only 100ms per incoming set of serial data, before moving on

在这里阅读:http://arduino.cc/en/Serial/SetTimeout

然后,逐渐减少超时,直到得到不好的结果,以尽量减少浪费的等待时间。然后再增加一点以确保它设置得足够高。

这是一种快速而肮脏的方法。基本上,您的 Arduino 设置为默认等待 1 秒,然后再继续,一旦传入数据被读入。

更好的方法是使用终止字符。例如:让 MATLAB 发送一个终止换行符,并使用 Arduino 函数Serial.readBytesUntil() 读取终止字符。然后,将永远不会达到串行输入超时,您可以再次将超时设置为较长(例如:1 秒),而无需实际等待该延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多