【问题标题】:fprintf (serial communication) in matlabmatlab中的fprintf(串行通信)
【发布时间】:2012-07-13 12:28:40
【问题描述】:

我正在尝试通过 matlab 函数和 .mex 文件与差分驱动移动机器人通信。我可以使用命令成功移动机器人:

ref = serial('COM1');
set(ref,'BaudRate', 9600);
fopen(ref);

fprintf(ref,'C,1000,1000');
out = fscanf(ref)

fclose(ref)
delete(ref)

但是,我创建的包含fprintf 的函数不起作用:

function r = Move(ref,left,right)

fprintf(ref,'C,left,right');
out = fscanf(ref)

我知道问题是命令fprintf 中使用的不同字符串(即'C,1000,1000' 不等于'C,left,right'),但我无法解决这个问题。对不起,如果这太琐碎了。

答案是(见下面的 cmets):

function r = Move(ref,left,right)

fprintf(ref,sprintf('C,%d,%d', left, right));
out = fscanf(ref);

【问题讨论】:

    标签: string matlab printf


    【解决方案1】:

    您可以尝试以下方法:

    function r = Move(ref,left,right)
    
    fprintf(ref,'C,%d,%d', left, right);
    out = fscanf(ref)
    

    【讨论】:

    • @Makaroni 您使用哪些参数调用move 函数? move(ref, 1000, 1000)?
    • 是的,基本上。调用函数Move时,我可以输入0到20000之间的任意数字。
    • 只是测试:在函数中放置fprintf(ref,'C,1000,1000'); 是否有效?
    • 您是否尝试过格式化的字符串看起来是否正确?例如。通过在函数中放置sprintf('C,%d,%d', left, right)(不使用分号)。
    • 是的,成功了!非常非常感谢你!答案是fprintf(ref,sprintf('C,%d,%d', left, right)); out = fscanf(ref)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多