2017-03-02 144 views
0

我正嘗試使用Matlab GUI連接到我的微控制器。第一步是設置元素,我的窗口包含4個軸,1個彈出窗口(選擇COM端口)和3個按鈕,「連接」,啓動和停止「 我需要用戶選擇COM端口。,這將是一次打開「連接」按下這裏是我的接口:嘗試連接到打開COM端口時出錯

enter image description here

這裏是我的代碼:

function varargout = gui2(varargin) 
% GUI2 MATLAB code for gui2.fig 
%  GUI2, by itself, creates a new GUI2 or raises the existing 
%  singleton*. 
% 
%  H = GUI2 returns the handle to a new GUI2 or the handle to 
%  the existing singleton*. 
% 
%  GUI2('CALLBACK',hObject,eventData,handles,...) calls the local 
%  function named CALLBACK in GUI2.M with the given input arguments. 
% 
%  GUI2('Property','Value',...) creates a new GUI2 or raises the 
%  existing singleton*. Starting from the left, property value pairs are 
%  applied to the GUI before gui2_OpeningFcn gets called. An 
%  unrecognized property name or invalid value makes property application 
%  stop. All inputs are passed to gui2_OpeningFcn via varargin. 
% 
%  *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one 
%  instance to run (singleton)". 
% 
% See also: GUIDE, GUIDATA, GUIHANDLES 

% Edit the above text to modify the response to help gui2 

% Last Modified by GUIDE v2.5 02-Mar-2017 15:10:00 

% Begin initialization code - DO NOT EDIT 
gui_Singleton = 1; 
gui_State = struct('gui_Name',  mfilename, ... 
    'gui_Singleton', gui_Singleton, ... 
    'gui_OpeningFcn', @gui2_OpeningFcn, ... 
    'gui_OutputFcn', @gui2_OutputFcn, ... 
    'gui_LayoutFcn', [] , ... 
    'gui_Callback', []); 
if nargin && ischar(varargin{1}) 
    gui_State.gui_Callback = str2func(varargin{1}); 
end 

if nargout 
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
else 
    gui_mainfcn(gui_State, varargin{:}); 
end 
% End initialization code - DO NOT EDIT 


% --- Executes just before gui2 is made visible. 
function gui2_OpeningFcn(hObject, eventdata, handles, varargin) 
% This function has no output args, see OutputFcn. 
% hObject handle to figure 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
% varargin command line arguments to gui2 (see VARARGIN) 

global comport ; 
global COMnum ; 


% Choose default command line output for gui2 
handles.output = hObject; 


% Update handles structure 
guidata(hObject, handles); 

% UIWAIT makes gui2 wait for user response (see UIRESUME) 
% uiwait(handles.figure1); 


% --- Outputs from this function are returned to the command line. 
function varargout = gui2_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT); 
% hObject handle to figure 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Get default command line output from handles structure 
varargout{1} = handles.output; 


% --- Executes on button press in Connect1. 
function Connect1_Callback(hObject, eventdata, handles) 
% hObject handle to Connect1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
COMnum = get(handles.COM2,'String'); 
comport = serial(COMnum, 'BaudRate', 115200); % setup comport 
comport.InputBufferSize = 500000; 
flushinput(comport); 
fopen(comport); 



% --- Executes on button press in Start1. 
function Start1_Callback(hObject, eventdata, handles) 
% hObject handle to Start1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 


% --- Executes on button press in Stop1. 
function Stop1_Callback(hObject, eventdata, handles) 
% hObject handle to Stop1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% --- Executes on selection change in COM2. 
function COM2_Callback(hObject, eventdata, handles) 
% hObject handle to COM2 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Hints: contents = cellstr(get(hObject,'String')) returns COM2 contents as cell array 
%  contents{get(hObject,'Value')} returns selected item from COM2 
Com=get(handles.COM2,'string'); 
setappdata(0,'COM',Com); 
guidata(hObject, handles); 


% --- Executes during object creation, after setting all properties. 
function COM2_CreateFcn(hObject, eventdata, handles) 
% hObject handle to COM2 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles empty - handles not created until after all CreateFcns called 

% Hint: popupmenu controls usually have a white background on Windows. 
%  See ISPC and COMPUTER. 
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) 
    set(hObject,'BackgroundColor','white'); 
end 

我的問題是,當我運行這個程序,我得到的以下錯誤:

gui2 


Error using serial (line 107) 
Cannot create: No constructor with appropriate signature exists in Java class com.mathworks.toolbox.instrument.SerialComm 

Error in gui2>Connect1_Callback (line 87) 
comport = serial(COMnum, 'BaudRate', 115200); % setup comport 

Error in gui_mainfcn (line 95) 
     feval(varargin{:}); 

Error in gui2 (line 42) 
    gui_mainfcn(gui_State, varargin{:}); 

Error in 
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)gui2('Connect1_Callback',hObject,eventdata,guidata(hObject)) 

Error while evaluating UIControl Callback 

爲什麼會這樣呢?

由於

+0

您聲稱錯誤出現在「當您運行該程序」時,但錯誤顯示爲「評估UIControl回調時出錯」,這意味着您還單擊了某些內容。請準確描述**如何使用提供的GUI代碼重現問題。另外,我們不能運行你的代碼,因爲運行GUIDE需要'.fig'文件。 –

回答

0

綜觀uicontrol的文件的實施例部分中,我們可以看到,一個'popup'(又名下拉)的String屬性保存一個單元陣列

% Create pop-up menu 
popup = uicontrol('Style', 'popup',... 
     'String', {'parula','jet','hsv','hot','cool','gray'},... 
     'Position', [20 340 100 50],... 
     'Callback', @setmap); 

這是爲什麼當你打電話時

COMnum = get(handles.COM2,'String'); 
comport = serial(COMnum, 'BaudRate', 115200); % setup comport 

你正在通過serial a 單元陣列第一個參數,而它期望字符串

可以做些什麼呢?該文件告訴我們這個問題,以及:

The Value property stores the row indexes of currently selected list box items

對於它的工作,你應該這樣做:

comport = serial(COMnum{get(handles.COM2,'Value')}, 'BaudRate', 115200); 

我建議你看看調試 - 它包含有用的提示,可能已經幫你找到在你自己的問題。

+0

啊哈,我現在明白了。非常感謝,一旦我到達實驗室並更新你,我會嘗試它,並確定我會添加它,我希望它也可以幫助其他人。 – Isra