본문 바로가기

Enginius/Matlab

keyDownListener + figCloseHandler + figTimer

1. main.m

이걸 실행시키면 된다. 화면에 figure를 띄우고, keyboard를 입력과 close handler와 timer를 실행한다. 

%% 1. Figure를 띄우고, KeyPressFcn과 CloseRequestFcn을 설정한다. 

fig = figure('Position', [500 100 900 800]);

set(fig,'KeyPressFcn', @keyDownListener ...

    , 'CloseRequestFcn',@figCloseHandler );


%% 2. PLOT을 위한 타이머를 설정한다. 

global timer_draw;

global timer_obj;

timer_obj.tick = 1;

timer_draw = timer('StartDelay', 1 ...

    , 'TimerFcn', @timerDraw ...

    , 'Period', 1E-1 ...

    , 'ExecutionMode', 'fixedRate'...

    );


%% 3. 타이머를 킨다. 

start(timer_draw);


2. keyDownListener.m

키보드 입력을 받아서 처리하는 함수 

function keyDownListener(~, event)

switch event.Key

    case 'uparrow'

        key_pressed = 'up';

    case 'downarrow'

        key_pressed = 'down';

    case 'leftarrow'

        key_pressed = 'left';

    case 'rightarrow'

        key_pressed = 'right';

    case 'a'

        key_pressed = 'a';

end

disp(key_pressed);


3. figCloseHandler.m

Figure가 닫칠 떄 자동으로 불리는 함수 

function figCloseHandler(src, event)

global timer_draw;


%% Timer를 닫는다. 

fprintf('Stop timer \n'); 

if exist('timer_draw')

    stop(timer_draw);

end


%% Figure를 닫는다. 

fprintf('Close figure \n');

delete(gcf);


4. timerDraw.m

타이머 함수이다. 

function timerDraw(obj, event)


%% 1. 타이머 틱을 올린다. 

timer_obj.tick = timer_obj.tick + 1;


%% 2. 그림을 그리자. (자연스럽게 띄어져 있는 fig에 써진다.)

clf;

plot(randn(1, 10), randn(1, 10), 'g');