我正在尝试使用Arduino板在Matlab中建立串行链接。从董事会读取数据进展顺利。但是,对于我发送的每个信息块,将数据写入电路板大约需要一秒钟。
我正在运行以编写数据的代码:
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方面。
答案 0 :(得分: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秒),而不必实际等待该延迟。