How to implement a timer in AppDesigner

154 次查看(过去 30 天)
Hello,
i hope somebody may can help me. I try to implement a timer (periodic 2ms) in Matlab AppDesiner (2016a). When the timer executes i will read data from a USB buffer. My problem is to set up the timer correctly so that the callback function TimerFcn is started.
Thanks
Best Regards Hannes

采纳的回答

Chris Portal
Chris Portal 2016-8-5
编辑:per isakson 2017-7-27
There are a few ways of doing this, but here's one way...
1) Create a custom property called myTimer, which would look like this:
properties (Access = private)
myTimer % Description
end
2) In your startup function, create your timer object, assign it to the custom property, and configure your timer callback. Something like this:
app.myTimer = timer('Period',2,...
'ExecutionMode', 'fixedSpacing', ...
'TasksToExecute', Inf);
app.myTimer.TimerFcn = @(x,y)disp('do something');
Note, if you need to wire your timer callback to a function inside your app, the TimerFcn syntax would be a little different. You can reference this post for a few options for that:
  6 个评论
Pedro Marques
Pedro Marques 2021-4-9
Were you able to solve this problem?
Best,
Pedro
David W Purcell
David W Purcell 2021-4-9
Yes. I had made some minor errors and it is working now. Thanks all for your help. David

请先登录,再进行评论。

更多回答(1 个)

Adee
Adee 2023-9-23
编辑:Adee 2023-9-23
The previous answer notes that "if you need to wire your timer callback to a function inside your app, the TimerFcn syntax would be a little different. You can reference this post for a few options (...)".
The refecenced post is long and It took me some experiments to find a clean way to do that, so I thought it's worth a separate answer.
The value provided for TimerFcn should be a function that accepts a timer and an event, and calls the callback method; but the callback method expects app as the first argument, so some translation is required.
In addition, the callback should be assigned separately after app has been properly created, in a startupFcn.
This can be done as follows:
properties (Access = private)
timer = timer('Name', 'App timer', 'Period', 15, 'ExecutionMode', 'fixedSpacing')
% This would create a delay of 15 seconds from end of callback invocation to next execution
end
methods (Access = private)
function timer_callback(app, timer_obj, event)
% Do whatever is needed
end
function startupFcn(app)
app.timer.TimerFcn = @(timer_obj, event) app.timer_callback(timer_obj, event);
end
end
Then, start and stop the timer using
app.timer.start;
and
app.timer.stop;
.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by