Using animatedline in Matlab App Designer?
古いコメントを表示
Hey everyone,
I am attempting to make a matlab app that is able to plot live data from my serial port. The data comes in separated with commas and is parsed accordingly (still in its early stages). I was able to get this code to work in the normal matlab code envirnment, shown below:
clear all;
delete(instrfindall);
clear;
close all;
clc;
s = serial('COM11', 'BaudRate',115200);
fopen(s);
voltage = 0;
t = 0;
y = 1;
data = fscanf(s);
data = convertCharsToStrings(data);
data = strsplit(data, ',');
TIME(y,1) = str2double(data(1));
VAR1(y,1) = str2double(data(2));
VAR2(y,1) = str2double(data(3));
h = animatedline(TIME(y,1),VAR1(y,1));
h2 = animatedline(TIME(y,1),VAR2(y,1));
xlim([TIME(y,1) TIME(y,1)+20]);
ylim([-1.2 1.2]);
grid on
title("Some Sine Waves");
xlabel("Time [sec]");
ylabel("Value");
tic
while t <= 200
y= y+1;
data = fscanf(s);
data = convertCharsToStrings(data);
data = strsplit(data, ',');
TIME(y,1) = str2double(data(1));
VAR1(y,1) = str2double(data(2));
VAR2(y,1) = str2double(data(3));
addpoints(h, TIME(y,1), VAR1(y,1));
addpoints(h2, TIME(y,1), VAR2(y,1));
xlim([TIME(y,1)-20 TIME(y,1)+4])
%y= y+1;
t=t+0.05;
drawnow
end
toc
fclose(s);
delete(s);
clear s;
This code works and will plot the data. I tried some other methods and the matlab program started to lag very badly, especially after running for 20+ seconds.
Using this code, I tried to apply it to the Matlab App Designer and this is where I am having trouble. The code "error" I am getting below is...
Reference to non-existent field 'UIAxes'
which makes no sense because that is my figure title. This happens right as I define the "animatedline" function. I know other people are having similar problems. When I push a button, the code gets executed. The code in my matlab app designer code window is below:
classdef app1 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
Apollo matlab.ui.Figure
Button matlab.ui.control.Button
UIAxis matlab.ui.control.UIAxes
end
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
end
% Button pushed function: Button
function ButtonPushed(app, event)
clear all;
delete(instrfindall);
clear;
close all;
clc;
s = serial('COM11', 'BaudRate',115200);
fopen(s);
t = 0;
y = 1;
data = fscanf(s);
data = convertCharsToStrings(data);
data = strsplit(data, ',');
app.TIME(y,1) = str2double(data(1));
app.VAR1(y,1) = str2double(data(2));
app.VAR2(y,1) = str2double(data(3));
app.h = animatedline(app.UIAxis, app.TIME(y,1),app.VAR1(y,1));
app.h2 = animatedline(app.UIAxis, app.TIME(y,1),app.VAR2(y,1));
% xlim([TIME(y,1) TIME(y,1)+20]);
% ylim([-1.2 1.2]);
% grid on
% title("Some Sine Waves");
% xlabel("Time [sec]");
% ylabel("Value");
tic
while t <= 200
y= y+1;
data = fscanf(s);
data = convertCharsToStrings(data);
data = strsplit(data, ',');
TIME(y,1) = str2double(data(1));
VAR1(y,1) = str2double(data(2));
VAR2(y,1) = str2double(data(3));
addpoints(h, TIME(y,1), VAR1(y,1));
addpoints(h2, TIME(y,1), VAR2(y,1));
%xlim([TIME(y,1)-20 TIME(y,1)+4])
%y= y+1;
t=t+0.05;
drawnow
end
toc
fclose(s);
delete(s);
clear s;
end
end
% App initialization and construction
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create Apollo
app.Apollo = uifigure;
app.Apollo.Position = [100 100 640 480];
app.Apollo.Name = 'UI Figure';
% Create Button
app.Button = uibutton(app.Apollo, 'push');
app.Button.ButtonPushedFcn = createCallbackFcn(app, @ButtonPushed, true);
app.Button.Position = [45 428 100 22];
% Create UIAxis
app.UIAxis = uiaxes(app.Apollo);
title(app.UIAxis, 'SINE WAVE')
xlabel(app.UIAxis, 'X')
ylabel(app.UIAxis, 'Y')
app.UIAxis.PlotBoxAspectRatio = [1 0.571428571428571 0.571428571428571];
app.UIAxis.Position = [83 111 407 261];
end
end
methods (Access = public)
% Construct app
function app = app1
% Create and configure components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.Apollo)
% Execute the startup function
runStartupFcn(app, @startupFcn)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.Apollo)
end
end
end
1 件のコメント
Ashleigh Reid
2021 年 6 月 16 日
Hi there,
Do you still have the arduino code for this task? I'm interested in how you read the data in. Many thanks.
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Develop Apps Using App Designer についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!