Connecting to a serial port in App Designer

조회 수: 47 (최근 30일)
royed
royed 2020년 6월 12일
댓글: Alessandro Livi 2024년 7월 25일
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

채택된 답변

Harsha Priya Daggubati
Harsha Priya Daggubati 2020년 6월 16일
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
Alessandro Livi
Alessandro Livi 2024년 7월 25일
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Develop uifigure-Based Apps에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by