Main Content

GUIDE 앱에서 자동으로 플롯 새로 고치기

참고

GUIDE 환경은 향후 릴리스에서 제거될 예정입니다. GUIDE가 제거된 후에도 기존 GUIDE 앱은 MATLAB®에서 계속 실행할 수 있지만 GUIDE에서 편집할 수는 없게 됩니다.

기존의 GUIDE 앱을 계속 편집하려면 GUIDE 마이그레이션 전략 항목에서 향후 MATLAB 릴리스와의 앱 호환성을 유지하는 방법에 대한 내용을 참고하십시오. 대화형 방식으로 새 앱을 만들려면 앱 디자이너를 사용하여 앱 개발하기 항목을 대신 참조하십시오.

이 예제에서는 사전 작성된 GUIDE 앱을 검토하고 실행하는 방법을 보여줍니다. 앱은 곡면 플롯을 표시하고 곡면에 랜덤 잡음을 추가하며 규칙적인 간격으로 플롯을 새로 고칩니다. 앱에는 플롯에 랜덤 잡음을 추가하는 작업을 시작하는 버튼과 이 작업을 중지하는 버튼이 포함되어 있습니다. 플롯 아래 슬라이더를 사용하여 사용자는 새로 고침 주기를 0.01초~2초로 설정할 수 있습니다.

예제 열기 및 실행하기

앱을 열고 실행합니다. 슬라이더를 이동하여 새로 고침 간격을 0.01초~2.0초로 설정합니다. 그런 다음, Start Randomizing 버튼을 클릭하여 플로팅된 함수에 랜덤 잡음을 추가하는 작업을 시작합니다. 잡음을 추가하고 플롯을 새로 고치는 작업을 중지하려면 Stop Randomizing 버튼을 클릭하십시오.

코드 살펴보기

  1. GUIDE에서 편집기 버튼 을 클릭하여 코드를 확인합니다.

  2. 편집기 창 상단에 있는 이동 버튼을 사용하여 아래에서 설명하는 함수로 이동합니다.

ex_guide_timergui_OpeningFcn

앱이 열려 실행되기 시작하면 ex_guide_timergui_OpeningFcn 함수가 실행됩니다. 다음 명령은 timer 객체를 만들어 handles 구조체에 저장합니다.

handles.timer = timer(...
    'ExecutionMode', 'fixedRate', ...       % Run timer repeatedly.
    'Period', 1, ...                        % Initial period is 1 sec.
    'TimerFcn', {@update_display,hObject}); % Specify callback function.
타이머에 대한 콜백 함수는 로컬 함수로 정의된 update_display입니다.

update_display

지정된 timer 시간이 경과하면 update_display 함수가 실행됩니다. 이 함수는 Surface 객체의 ZData 속성값을 가져와 랜덤 잡음을 추가합니다. 그런 다음, 플롯을 업데이트합니다.

handles = guidata(hfigure);
Z = get(handles.surf,'ZData');
Z = Z + 0.1*randn(size(Z));
set(handles.surf,'ZData',Z);

periodsldr_Callback

사용자가 슬라이더를 이동하면 periodsldr_Callback 함수가 실행됩니다. 함수는 슬라이더 값을 가져와 자르는 방식으로 타이머 시간을 계산합니다. 그런 다음, 슬라이더 아래의 레이블과 timer 객체의 시간을 업데이트합니다.

% Read the slider value
period = get(handles.periodsldr,'Value');
% Truncate the value returned by the slider.
period = period - mod(period,.01);
% Set slider readout to show its value.
set(handles.slidervalue,'String',num2str(period))
% If timer is on, stop it, reset the period, and start it again.
if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
    set(handles.timer,'Period',period)
    start(handles.timer)
else               % If timer is stopped, reset its period.
    set(handles.timer,'Period',period)
end

startbtn_Callback

타이머가 아직 실행되고 있지 않으면 startbtn_Callback 함수는 timer 객체의 start 메서드를 호출합니다.

if strcmp(get(handles.timer, 'Running'), 'off')
    start(handles.timer);
end

stopbtn_Callback

타이머가 현재 실행되고 있으면 stopbtn_Callback 함수는 timer 객체의 stop 메서드를 호출합니다.

if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
end

figure1_CloseRequestFcn

사용자가 앱을 닫으면 figure1_CloseRequestFcn 콜백이 실행됩니다. 함수는 timer 객체를 중지하고(실행되고 있는 경우), timer 객체를 삭제한 다음, Figure 창을 삭제합니다.

if strcmp(get(handles.timer, 'Running'), 'on')
    stop(handles.timer);
end
% Destroy timer
delete(handles.timer)
% Destroy figure
delete(hObject);

관련 항목