matlab回调在第二次印刷时不起作用

时间:2015-03-24 10:49:13

标签: matlab

我在matlab中创建了一个gui,它由三个按钮,edittexts和plot组成。 按下第一个按钮(开始),matlab开始执行'开始回调'它包含一个while循环。按下第二个按钮(停止按钮)停止的回调被执行。现在,如果我再次按下开始按钮,它将从第一行回调开始执行,或者在停止时最初离开的while循环内的某个地方开始执行按钮被按下了。 基本上我的代码中的问题是启动和停止按钮在第一次按下时正常工作,但第二次按钮根本不起作用。 下面是我的代码:

   function matgui1_OpeningFcn(hObject, eventdata, handles, varargin)

  handles.output = hObject;
  guidata(hObject, handles);

  set(handles.stop,'Enable','off'); 

  s = serial('COM1');
  set(s,'BaudRate',9600);
  set(s,'Timeout',20);
  set(s,'ReadAsyncMode','continuous');
  fopen(s);
  handles=guidata(hObject);
  handles.set=s;
  guidata(hObject,handles);
  function varargout = matgui1_OutputFcn(hObject, eventdata, handles) 
  varargout{1} = handles.output;

%---在开始时按下按钮执行。

  function start_Callback(hObject, eventdata, handles)

  set(handles.start,'Enable','off');  
  set(handles.Refresh,'Enable','off');
  set(handles.stop,'Enable','on');
  drawnow;
  s=handles.set;
  fprintf(s,'%c','s');
  i=1;
  string1='start';
  set(handles.edit5, 'String', string1);
  drawnow;
  while(1)
  if(s.BytesAvailable>0)
  a = fread(s,1,'uint8');
  t(i)=a;
  drawnow;
  plotData=plot(t,'linewidth',1);
  drawnow;

  grid on;
  drawnow;
  i=i+1; 

   end
   end
   fclose(s)
   delete(s)

停止按钮回拨

  function stop_Callback(hObject, eventdata, handles)

  set(handles.stop,'Enable','off');
  set(handles.start,'Enable','on');  
  set(handles.Refresh,'Enable','on');
  drawnow;
  setup=handles.set;
  fprintf(setup,'%c','g');
  flushinput(setup);
   string1='stop';
   set(handles.edit5, 'String', string1);

1 个答案:

答案 0 :(得分:0)

我的评论声誉不高,但是在退出开始和停止回调之前是否更新了句柄结构?所以你有这条线 guidata(hObject, handles);在他们的最后? 如果第二次按钮不起作用,则意味着它们被禁用,这可能是原因,并且您在set(...)中所做的更改不会保留在特定回调函数之外。