Connecting to a serial port in App Designer
    24 views (last 30 days)
  
       Show older comments
    
    royed
 on 12 Jun 2020
  
    
    
    
    
    Commented: Alessandro Livi
 on 25 Jul 2024
            Hello,
I want to connect to a serial port using App Designer, I know how to just use it over the command line but in App Designer I am not sure how to do two things, first how do I connect to the device at once rather than connecting to the device everytime I press a button, second I want to define a variable "rel" through which I can define how much the piezo stage can move. But for the error that I am getting is 
Reference to non-existent field 'rel'.
Error in app1/upButtonPushed (line 29)
            temp=app.rel.Value
Error using matlab.ui.control.internal.controller.ComponentController/executeUserCallback (line 335)
Error while evaluating Button PrivateButtonPushedFcn.
The code fo the APP designer is:
classdef app1 < matlab.apps.AppBase
    % Properties that correspond to app components
    properties (Access = public)
        UIFigure           matlab.ui.Figure
        up                 matlab.ui.control.Button
        left               matlab.ui.control.Button
        right              matlab.ui.control.Button
        down               matlab.ui.control.Button
        relEditFieldLabel  matlab.ui.control.Label
        rel                matlab.ui.control.NumericEditField
    end
    properties (Access = public)
        s % Description
    end
    % Callbacks that handle component events
    methods (Access = private)
        % Button pushed function: up
        function upButtonPushed(app, event)
            clear all
            app.s = serialport("COM5",38400); 
            configureTerminator(app.s,"CR")
            temp=app.rel.Value
            writeline(app.s, sprintf('2MVR%d',temp)); 
            %writeline(app.s, '2MVR-2'); 
            %data=readline(s)
        end
        % Button pushed function: left
        function leftButtonPushed(app, event)
             clear all
            app.s = serialport("COM5",38400); 
            configureTerminator(app.s,"CR")
            writeline(app.s, '1MVR2'); 
        end
        % Button pushed function: right
        function rightButtonPushed(app, event)
               clear all
            app.s = serialport("COM5",38400); 
            configureTerminator(app.s,"CR")
            writeline(app.s, '1MVR-2'); 
        end
        % Button pushed function: down
        function downButtonPushed(app, event)
               clear all
            app.s = serialport("COM5",38400); 
            configureTerminator(app.s,"CR")
            writeline(app.s, '2MVR2'); 
        end
    end
    % Component initialization
    methods (Access = private)
        % Create UIFigure and components
        function createComponents(app)
            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Position = [100 100 319 165];
            app.UIFigure.Name = 'UI Figure';
            % Create up
            app.up = uibutton(app.UIFigure, 'push');
            app.up.ButtonPushedFcn = createCallbackFcn(app, @upButtonPushed, true);
            app.up.Icon = 'icons8-collapse-arrow-48.png';
            app.up.Position = [73 115 39 22];
            app.up.Text = '';
            % Create left
            app.left = uibutton(app.UIFigure, 'push');
            app.left.ButtonPushedFcn = createCallbackFcn(app, @leftButtonPushed, true);
            app.left.Icon = 'icons8-back-48.png';
            app.left.Position = [18 71 39 22];
            app.left.Text = '';
            % Create right
            app.right = uibutton(app.UIFigure, 'push');
            app.right.ButtonPushedFcn = createCallbackFcn(app, @rightButtonPushed, true);
            app.right.Icon = 'icons8-forward-48.png';
            app.right.Position = [128 71 39 22];
            app.right.Text = '';
            % Create down
            app.down = uibutton(app.UIFigure, 'push');
            app.down.ButtonPushedFcn = createCallbackFcn(app, @downButtonPushed, true);
            app.down.Icon = 'icons8-expand-arrow-48.png';
            app.down.Position = [73 31 39 22];
            app.down.Text = '';
            % Create relEditFieldLabel
            app.relEditFieldLabel = uilabel(app.UIFigure);
            app.relEditFieldLabel.HorizontalAlignment = 'right';
            app.relEditFieldLabel.Position = [158 125 25 22];
            app.relEditFieldLabel.Text = 'rel';
            % Create rel
            app.rel = uieditfield(app.UIFigure, 'numeric');
            app.rel.Position = [198 125 100 22];
            app.rel.Value = -2;
            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end
    % App creation and deletion
    methods (Access = public)
        % Construct app
        function app = app1
            % Create UIFigure and components
            createComponents(app)
            % Register the app with App Designer
            registerApp(app, app.UIFigure)
            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
    end
end
0 Comments
Accepted Answer
  Harsha Priya Daggubati
    
 on 16 Jun 2020
        Hi,
The issue when accessing rel.Value is your file is saved as app1, while you are using app to access rel's Value. Use app1 instead, I guess this solves your issue.
Instead of connecting to serial port at each callback, you can use StartupFcn callback of UIFigure to do the work for you. You can add the callback by clicking on callback icon in the toolstrip.
Hope this helps!
1 Comment
  Alessandro Livi
 on 25 Jul 2024
				Can't add a callback that way because serialport is not one of the choices for adding a callback.
Serialport configureCallback is broken in 2023b
More Answers (0)
See Also
Categories
				Find more on Develop Apps Using App Designer in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

