2015-03-24 4 views
0

Я создал gui в matlab, он состоит из трех кнопок, edittexts и сюжета. При нажатии первой кнопки (запуска) matlab запускает выполнение «start callback», который содержит цикл while. Нажатие второй кнопки (кнопка останова) вызывает обратный вызов остановки. Теперь, если я снова нажму кнопку запуска, он начнет выполнение с первая строка обратного вызова или где-то внутри цикла while, где он остался первоначально, когда нажата кнопка остановки. В основном проблема в моем коде заключается в том, что кнопка запуска и остановки работает правильно при первом нажатии, но во второй раз кнопки не работают вообще. ниже мой код:callbacks matlab не работает при втором нажатии

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

ответ

0

не имеют достаточно высокую репутацию на комментарий, но вам обновить структуру ручки перед выходом запуска и остановки функции обратного вызова? Итак, у вас есть линия guidata(hObject, handles); в конце их? Если кнопки не работают во второй раз, когда вы имеете в виду, что они отключены, это, вероятно, причина, и изменения, которые вы делаете с помощью set (...), не сохраняются за пределами определенных функций обратного вызова.

Смежные вопросы