【问题标题】:Matlab timer undefined function or variableMatlab定时器未定义函数或变量
【发布时间】:2013-03-21 18:56:14
【问题描述】:

我有一个关于 matlab 计时器对象的问题。我的 gui 中有一个按钮,它创建一个计时器,每个 0.1 的周期我想调用我的函数。

function playBtn_Callback(hObject, eventdata, handles)
global pl;
global c;
global g;
global t;
global myData;
if isplaying(pl)
     pause(pl);
     set(handles.playBtn, 'string', 'Play');
else 
     resume(pl);
     set(handles.playBtn, 'string', 'Pause');
end
myData=guidata(handles.timertext);
c=get(pl, 'CurrentSample')
g=get(pl, 'TotalSample')
a = timer;
set(a, 'ExecutionMode', 'FixedRate');
set(a, 'TimerFcn', 'myFunction', 'Period', 0.1);
start(a);



function t = myFunction()
global mydata;
global pl;
global sf;
global mySong;

c=get(pl, 'CurrentSample')
set(mydata.timertext, 'String', c/sf);

sf 是我歌曲的频率。

我得到的错误是这样的:

为计时器“timer-26”评估 TimerFcn 时出错

未定义的函数或变量“myFunction”。

【问题讨论】:

    标签: function matlab audio callback


    【解决方案1】:

    您需要为“TimerFcn”的值传递函数句柄,而不是字符串。因为你的函数在你的 UI m 文件中,它不能被外部访问(没有一些技巧),所以你必须传递一个实际的函数句柄而不是一个字符串。 (否则它会调用 str2func 并得到一个它不能使用的函数句柄)。

    如果你不知道我在说什么,请阅读http://www.mathworks.co.uk/help/matlab/matlab_prog/creating-a-function-handle.html

    您还应该查看 guidata 函数的文档 - 无需使用全局变量。

    【讨论】:

    • t= myFunction() 这一行是否没有将该函数的处理程序带到 t 变量?我试图用变量 t 替换那个 'myFunction' 字符串,但结果是一样的。
    • 不,不是。这里的变量 t 只是您定义的函数的返回值。查看答案的编辑版本和链接;您需要使用@myFunction(或者,理想情况下,向myFunction 添加一个输入参数并使用@()myFunction(guidata(hObject)) 获取它的句柄),以便您可以传入句柄结构并摆脱那些讨厌的全局变量)。
    猜你喜欢
    • 2023-03-08
    • 2013-09-27
    • 2021-11-22
    • 2012-04-15
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多