我需要制作一个计时器,在多阶段延迟任务开始时开始计数,并在经过一定时间后结束延迟任务,继续进行下一部分实验。现在,我想在 2 秒后结束任务。
在下面的代码中,我包含了一个可以粘贴到编辑器中的示例。我为这个延迟任务使用了 Stroop 任务的一部分,该任务由一个阶段组成(在我的实际代码中有 3 个阶段,但我为这个问题简化了任务)——按 1 键为红色,按 2 键为绿色,以及蓝色的 3 键。每个阶段目前进行六次试验。(目前我的一个阶段只有一组 6 次试验)。
我希望任务本身(所有阶段一起)持续一段时间,然后在我设置的时间终止,无论试用号如何。因此,如果 2 秒过去了,任务应该结束,即使我们只处于第 1 阶段,第 3 次试验(共 6 次)。
下面被注释掉的代码(带有 NumSecondsStart 和 NumSecondsEnd 的循环)是我目前的尝试。我不确定这样的循环会去哪里(围绕循环阶段,围绕试验循环?)谢谢!
代码:
clear all
close all
KbName('UnifyKeyNames');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[window, rect]=Screen('OpenWindow',0);
RED=KbName('1'); GREEN=KbName('2'); BLUE=KbName('3');
keysOfInterest=zeros(1,256);
keysOfInterest([RED, GREEN, BLUE])=1;
KbQueueCreate(-1, keysOfInterest);
KbQueueStart;
WORDCOLORS = {'red', 'green', 'blue'};
rgbColors = [1000 0 0; 0 1000 0; 0 0 1000];
starttime=Screen('Flip',window);
KbQueueFlush;
% NumSecondsStart = GetSecs;
% while (NumSecondsEnd-NumSecondsStart) == 1
for phase = 1
design=repmat([1 2 3], 2, 2)';
if phase == 1
designRand=design(randperm(length(design)),:);
Word=WORDCOLORS(designRand(1:6));
Color=rgbColors(designRand(:,2),:);
end
for trial=1:6
if phase == 1
DrawFormattedText(window, Word{trial}, 'center' ,'center', Color(trial,:));
WaitSecs(rand+.5)
starttime=Screen('Flip',window);
[pressed, firstPress]=KbQueueCheck;
endtime=KbQueueWait();
RTtext=sprintf('Response Time =%1.2f secs',endtime-starttime);
DrawFormattedText(window,RTtext,'center' ,'center',[255 0 255]);
vbl=Screen('Flip',window);
Screen('Flip',window,vbl+1);
NumSecondsEnd =GetSecs;
end
end
end
% break;
% end
ListenChar(0);
ShowCursor();
Screen('CloseAll');