2017-02-27 2 views
2

J'essaie d'envoyer des données de mon arduino à matlab et j'utilise l'interface graphique. Je veux lire continuellement les données même si aucun bouton n'est pressé. Pour ce faire, je dois utiliser la fonction fscanf mais je ne sais pas où le mettre. Il y a certainement une boucle while qui attend les événements (comme un bouton poussé) dans lequel cette fonction doit être placée. Je suis juste un débutant donc ceci pourrait être une question stupide pour vous. Merci d'avance!Matlab-Arduino live traçage

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'); 

Répondre

2

Vous devez définir Matlab pour attendre les données de Arduino dans une boucle while, vérifiez cet exemple de code:

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