How to run a function each certain amount of time during loop?

I am running some kind of neurology experiment where i need to record cursor location and movements. I am doing this using infinte loop with Getmouse() inside (and also other manipulations on the cursor position) and write the position in log test file.
so far so good, the thing is that i need every few seconds to run a sync function which i already wrote (which send signal to serial port and write this event to the same log file from before).
How can i define event or interrupt in order to stop the loop every few seconds?
I am hoping i made my self clear and thanks.

답변 (1개)

José-Luis
José-Luis 2017년 8월 21일

0 개 추천

Looks like you need a timer object inside your function.

댓글 수: 2

Hi thanks
tried your idea but having very weird thing.
i can see that the timer has finished but i don't know why it does not get into the if and break command.
any idea? (my goal is to break from the function after 4 seconds of the cursor inside a circle)
firstInside = 0;
timeout=0;
while (1)
[x, y] = GetMouse(cfg.window);
Cursor = CenterRectOnPointd(cfg.cursorShape, x, y);
if (mod(new_counter,20) == 0)
Screen('FrameOval', cfg.window , [cfg.TARGET_COLOR' cfg.CURSOR_COLOR'],[Target' Cursor'],4);
Screen('flip', cfg.window);
end
inside = IsInRect(x, y, Target);
new_counter = new_counter+1;
if inside
if ~firstInside
insideTimer = timer('TimerFcn', 'disp(''timer finished'');timeout=1','StartDelay',3);
firstInside=1;
start(insideTimer);
disp('timer started');
timeout = 0;
end
if timeout==1
return
end
Do not create the timer callback as a string, because such strings are evaluated in the base workspace, such that the change of timeout is not visible inside the function.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Timing and presenting 2D and 3D stimuli에 대해 자세히 알아보기

태그

질문:

2017년 8월 21일

댓글:

Jan
2017년 8월 23일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by