How to implement a timer in AppDesigner
    62 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Hannes Rathmann
 el 27 de Jul. de 2016
  
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
0 comentarios
Respuesta aceptada
  Chris Portal
    
 el 5 de Ag. de 2016
        
      Editada: per isakson
      
      
 el 27 de Jul. de 2017
  
      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 comentarios
  Pedro Marques
 el 9 de Abr. de 2021
				
  David W Purcell
 el 9 de Abr. de 2021
				Yes. I had made some minor errors and it is working now. Thanks all for your help. David
Más respuestas (1)
  Adee
      
 el 23 de Sept. de 2023
        
      Editada: Adee
      
 el 23 de Sept. de 2023
  
      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;
.
0 comentarios
Ver también
Categorías
				Más información sobre Startup and Shutdown en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!