Matlab串口通讯:fprintf不一致的行为

时间:2015-03-09 15:24:15

标签: matlab serial-port printf arduino-uno

我正在编写一个与arduino交谈的脚本。 arduino侦听串口上的通信,并根据收到的命令行动。

如果我在Matlab命令提示符下工作,一切都按预期工作:我发送命令:

s = serial('COM4','BaudRate',9600, 'Terminator', 'LF/CR');
fopen(s);
fprintf(s, '%s','start');
pause(10;
fprintf(s, '%s','stop');
fclose(s);

并且arduino通过启用泵10秒钟做出反应,然后关闭它。

如果我使用脚本中完全相同的代码,则不会发生任何事情。 问题似乎存在于fprintf中,因为如果我从脚本打开串行通信(并保持打开状态),我可以从提示符发送启动/停止命令,它可以工作。

我尝试在脚本中添加行终止符

fprintf(s, '%s \n','start');

但是这也没有做任何事情(虽然它在命令提示符下工作正常)。

有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分:1)

事实证明问题的根源是fopen函数需要很长时间才能工作。 之前我曾试图在它之后添加1秒的暂停,但看不到任何改进我已将其删除。 现在我只是尝试添加更多时间(目前为3秒)并且脚本正确执行。

总结一下:如果您遇到同样的问题,请添加

pause(3)

在fopen和任何其他串口命令之间,脚本应该可以正常工作。