我需要制作一个计时器,它在多阶段延迟任务开始时开始计数,并在经过一段时间后结束延迟任务,然后继续进行下一部分实验。现在,我想在2秒过后结束任务。
在下面的代码中,我添加了一个可以粘贴到编辑器中的示例。我使用Stroop任务的一部分进行此延迟任务,该任务由一个阶段组成(在我的实际代码中有3个阶段,但我简化了这个问题的任务) - 按1键为红色,2键为绿色,以及蓝色的3键。每个阶段目前进行六次试验。 (目前我的一个阶段只有一组6个试验。)
我希望任务本身(所有阶段在一起)持续一段时间,然后在我设置的时间终止而不管试用号码。因此,如果2秒过去了,即使我们只处于第1阶段,即第3阶段的第3阶段,任务也应该结束。
下面的注释掉的代码(带有NumSecondsStart和NumSecondsEnd的循环)是我当前的尝试。我不确定这样的循环会在哪里(围绕试验循环的循环阶段?)谢谢!
CODE:
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');