Hi,
I am still struggling through app designer and i still cannot get my app to run again. I have attached the code but I am at a road block and need help trouble shooting. I currently am hard coding hte arduino connection in so it has to be within my while loop. I basically want it to start again and draw another line but after it pops up the figure it will not. Any help is greatly appreciated!
classdef app2 < matlab.apps.AppBase % Properties that correspond to app components
properties (Access = public) UIFigure matlab.ui.Figure RUNButton matlab.ui.control.Button STOPButton matlab.ui.control.Button UIAxes matlab.ui.control.UIAxes COMPortEditFieldLabel matlab.ui.control.Label COMPortEditField matlab.ui.control.EditField SaveAsEditFieldLabel matlab.ui.control.Label SaveAsEditField matlab.ui.control.EditField end properties (Access = private) stop; port; done=0; timeLogs; forceLogs; timeSecs; filename; T; h; a; starttime; t; end methods (Access = private) function reset(app) app.h=0; app.starttime=0; app.t=0; app.stop=false; end end methods (Access = private) % Code that executes after component creation
function startupFcn(app, a) app.a=arduino('Com5','uno'); end % Value changed function: COMPortEditField
function COMPortEditFieldValueChanged(app, event) value = app.COMPortEditField.Value; app.port=value; end % Button pushed function: RUNButton
function RUNButtonPushed(app, event) figure app.h=animatedline; ax=gca; ax.YGrid='on'; ax.YLim=[0 80]; app.stop=false; app.starttime=datetime('now'); while ~app.stop % Read current voltage value
voltage1 = readVoltage(app.a,'A0'); voltage2 = readVoltage(app.a,'A1'); % Calculate force from voltage (based on data sheet)
% Flipped for ease of use
force1=-(13.499*voltage1)+68.534; %from calibration with standard weights
force2=-(9.9586*voltage2)+49.882; %from calibration with standard weights force=force1+force2; % Get current time
app.t = datetime('now') - app.starttime; % Add points to animation
addpoints(app.h,datenum(app.t),force) % Update axes
ax.XLim = datenum([app.t-seconds(15) app.t]); datetick('x','keeplimits') drawnow % Check stop condition
app.stop = app.done; end end % Button pushed function: STOPButton
function STOPButtonPushed(app, event) app.done=1; [app.timeLogs,app.forceLogs] = getpoints(app.h); app.timeSecs = (app.timeLogs-app.timeLogs(1))*24*3600; app.T = table(app.timeSecs',app.forceLogs','VariableNames',{'Time_sec','Force_N'}); % Write table to file
writetable(app.T,app.filename) [app.timeLogs,app.forceLogs] = getpoints(app.h); app.timeSecs = (app.timeLogs-app.timeLogs(1))*24*3600; plot(app.UIAxes,app.timeSecs,app.forceLogs) reset(app) end % Value changed function: SaveAsEditField
function SaveAsEditFieldValueChanged(app, event) value = app.SaveAsEditField.Value; app.filename=value; end % Value changing function: COMPortEditField
function COMPortEditFieldValueChanging(app, event) changingValue = event.Value; app.port=changingValue; end end % App initialization and construction
methods (Access = private) % Create UIFigure and components
function createComponents(app) % Create UIFigure
app.UIFigure = uifigure; app.UIFigure.Position = [100 100 640 480]; app.UIFigure.Name = 'UI Figure'; % Create RUNButton
app.RUNButton = uibutton(app.UIFigure, 'push'); app.RUNButton.ButtonPushedFcn = createCallbackFcn(app, @RUNButtonPushed, true); app.RUNButton.BackgroundColor = [0 1 0]; app.RUNButton.Position = [388 22 100 31]; app.RUNButton.Text = 'RUN'; % Create STOPButton
app.STOPButton = uibutton(app.UIFigure, 'push'); app.STOPButton.ButtonPushedFcn = createCallbackFcn(app, @STOPButtonPushed, true); app.STOPButton.BackgroundColor = [1 0 0]; app.STOPButton.Position = [509 22 100 31]; app.STOPButton.Text = 'STOP'; % Create UIAxes
app.UIAxes = uiaxes(app.UIFigure); title(app.UIAxes, 'Force vs. Time') xlabel(app.UIAxes, 'Time') ylabel(app.UIAxes, 'Force') app.UIAxes.YGrid = 'on'; app.UIAxes.Position = [11 72 619 398]; % Create COMPortEditFieldLabel
app.COMPortEditFieldLabel = uilabel(app.UIFigure); app.COMPortEditFieldLabel.HorizontalAlignment = 'right'; app.COMPortEditFieldLabel.Position = [44 52 59 22]; app.COMPortEditFieldLabel.Text = 'COM Port'; % Create COMPortEditField
app.COMPortEditField = uieditfield(app.UIFigure, 'text'); app.COMPortEditField.ValueChangedFcn = createCallbackFcn(app, @COMPortEditFieldValueChanged, true); app.COMPortEditField.ValueChangingFcn = createCallbackFcn(app, @COMPortEditFieldValueChanging, true); app.COMPortEditField.Position = [118 52 100 22]; app.COMPortEditField.Value = 'Com'; % Create SaveAsEditFieldLabel
app.SaveAsEditFieldLabel = uilabel(app.UIFigure); app.SaveAsEditFieldLabel.HorizontalAlignment = 'right'; app.SaveAsEditFieldLabel.Position = [45 12 54 22]; app.SaveAsEditFieldLabel.Text = 'Save As:'; % Create SaveAsEditField
app.SaveAsEditField = uieditfield(app.UIFigure, 'text'); app.SaveAsEditField.ValueChangedFcn = createCallbackFcn(app, @SaveAsEditFieldValueChanged, true); app.SaveAsEditField.Position = [114 12 214 22]; end end methods (Access = public) % Construct app
function app = app2(varargin) % Create and configure components
createComponents(app) % Register the app with App Designer
registerApp(app, app.UIFigure) % Execute the startup function
runStartupFcn(app, @(app)startupFcn(app, varargin{:})) if nargout == 0 clear app end end % Code that executes before app deletion
function delete(app) % Delete UIFigure when app is deleted
delete(app.UIFigure) end endend
Best Answer