2017-02-27 119 views
2

我想从我的arduino发送数据到matlab并使用GUI。即使没有按钮被按下,我也要连续读取数据。为了这么做,我必须使用fscanf函数,但我不知道该把它放在哪里。肯定有一个while循环等待应该放置这个函数的事件(比如一个按钮)。我只是一个初学者,所以这可能是一个愚蠢的问题。 提前谢谢!Matlab-Arduino实时阴谋

function varargout = UltraPlot(varargin) 

global a; 
global k; 
gui_Singleton = 1; 
gui_State = struct('gui_Name',  mfilename, ... 
       'gui_Singleton', gui_Singleton, ... 
       'gui_OpeningFcn', @UltraPlot_OpeningFcn, ... 
       'gui_OutputFcn', @UltraPlot_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 
disp('Ultraplot'); 


function UltraPlot_OpeningFcn(hObject, eventdata, handles, varargin) 

global a; 
global k; 
a = serial('COM3'); 
fopen(a); 
handles.output = hObject; 


guidata(hObject, handles); 


disp('Opening'); 


function varargout = UltraPlot_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output; 
global a; 
global k; 
disp('varargout'); 

function Start_Callback(hObject, eventdata, handles) 

global a; 
global k; 
fprintf(a,'%d',1); 
disp('Button pressed'); 

回答

2

你必须设置Matlab来等待来自Arduino的在while循环的任何数据,检查此示例代码:

clear;clc; 
S=serial('com18'); % Create an S Object 
data=0; 
set(S,'inputbuffersize',4096,'timeout',20); % Set serial communication  parameter 
fopen(S); % Open serial communcation 

    while (1) 
     if s.bytesavailable>0 % If data from Arduino is available 
      data=fscanf(S); 
      data = str2num(data); 
      % Do whatever you want with data here... 
     end 
    data=0; 
    end