return value from timer callback function
이전 댓글 표시
I want to update a matrix on each call of the timer function in a timer object. I read in the news group that the return variable should be assigned in the base MatLab workspace. So even after that I get a strange result. Here is the code:
% define constants
total_time = 12;
swap_count = 3;
swap_period = floor(total_time/swap_count);
% assign output variable from callback function
assignin('base','X','AB');
% crete a timer object and set properties
t_obj = timer;
set(t_obj, 'StartDelay', swap_period);
set(t_obj, 'Period', swap_period);
set(t_obj, 'TasksToExecute', swap_count);
set(t_obj, 'ExecutionMode', 'fixedRate');
set(t_obj, 'UserData', 'X');
set(t_obj, 'StartFcn',{@swap_fcn, X});
set(t_obj, 'TimerFcn',{@swap_fcn, X});
set(t_obj, 'StopFcn',{@swap_fcn, X});
% start timer loop
start(t_obj);
pause(total_time+1);
stop(t_obj);
delete(t_obj);
% callback function
function [X] = swap_fcn(obj, event, X)
% event properties
event_type = event.Type;
event_time = datestr(event.Data.time,'HH:MM:SS, dd mmm YYYY');
% get times executed
exec_count = get(obj, 'TasksExecuted');
% write step and write to file
switch event_type
case 'StartFcn'
fprintf('start experiment: %s\n',event_time);
disp(X);
case 'TimerFcn'
fprintf('swap%02d: %s\n',exec_count, event_time);
X = fliplr(X);
disp(X);
case 'StopFcn'
fprintf('stop experiment: %s\n',event_time);
disp(X);
end
end
so after running that i got the following result
start experiment: 13:53:18, 19 Sep 2013
AB
swap01: 13:53:22, 19 Sep 2013
BA
swap02: 13:53:26, 19 Sep 2013
BA
swap03: 13:53:30, 19 Sep 2013
BA
stop experiment: 13:53:30, 19 Sep 2013
AB
I would expect something like that:
start experiment: 13:53:18, 19 Sep 2013
AB
swap01: 13:53:22, 19 Sep 2013
BA
swap02: 13:53:26, 19 Sep 2013
AB
swap03: 13:53:30, 19 Sep 2013
BA
stop experiment: 13:53:30, 19 Sep 2013
BA
It seems like I never return the updated version of X in the next TimerFcn call.
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Programming Utilities에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!