Use Timer to Plot Data Periodically in an App
This app shows how to configure a timer in App Designer to execute a task at regular time intervals. In this example, the app uses a timer to query wind speed data from a website every five seconds and then plots the returned value.
Query and Plot Data
In a callback function for the timer, write the code for the task that you want to execute periodically. Create a private function named
WindSpeedTimerFcn and include two extra input arguments in the function header. The first argument, often named
src, specifies the object that triggers the callback, and the second argument, often named
event, provides event data to the callback function. Passing these two extra input arguments specify the function as a timer callback. For more information about the syntax for timer callbacks, see Timer Callback Functions.
Within this callback, add code to extract and process data from a website. Then plot the data using the axes as the first argument in the
plot function. For more information about plotting within an app, see Display Graphics in App Designer.
function WindSpeedTimerFcn(app,src,event) % Get current time tnow = datetime("now","TimeZone","America/New_York"); % Get wind speed data from MathWorks weather station weatherdata = webread("https://api.thingspeak.com/channels/12397/feeds/last.json"); y = str2double(weatherdata.field2); % Plot data plot(app.UIAxes,tnow,y,"ob"); % Adjust x and y limits based on plotted data % ... end
Create a timer that runs the
WindSpeedTimerFcn function every five seconds. First, create a private property named
WindSpeedTimer to store the timer so that you can modify and delete the timer in different parts of the app code. Select Property from the Editor tab in the App Designer toolstrip and choose the Private Property option. Then in a
startupFcn callback, create the timer and store it in
app.WindSpeedTimer = timer("ExecutionMode","fixedRate","Period",5, ... "BusyMode","queue","TimerFcn",@app.WindSpeedTimerFcn)
This function call configures the timer to run repeatedly every five seconds. It also queues timer callbacks when the timer is busy and specifies the function
WindSpeedTimerFcn as the callback function to execute at regular intervals when the timer is running. Use the function handle
@app.WindSpeedTimerFcn to associate this function with the
TimerFcn callback of the
timer object. MATLAB® automatically passes two input arguments to the callback function when the function executes, so the function handle does not explicitly refer to any input arguments.
Start and Stop the Timer
Create callback functions to start and stop the timer when the corresponding buttons are pushed. Access the
timer object in these callback functions by referencing the
Start the timer, if it is not already running, in a callback function for when the Start button is pushed.
if strcmp(app.WindSpeedTimer.Running,"off") start(app.WindSpeedTimer); end
Stop the timer in a callback function for when the Stop button is pushed.
For more information about callbacks, see Callbacks in App Designer.
Delete Timer When App Closes
To optimize app performance, delete the timer when the app closes by creating a close request callback function. Start by adding a
CloseRequestFcn callback for the app by right-clicking the UI figure in the Component Browser and selecting Callbacks > Add CloseRequestFcn callback in the context menu. Then in this
CloseRequestFcn callback, stop the timer.
Finally, delete the timer and figure.
To view and run the fully coded app, launch this example in App Designer.