无论试用次数如何,如何根据时间终止任务(Psychtoolbox)

时间:2014-04-06 20:22:51

标签: matlab timer while-loop psychtoolbox

我需要制作一个计时器,它在多阶段延迟任务开始时开始计数,并在经过一段时间后结束延迟任务,然后继续进行下一部分实验。现在,我想在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'); 

1 个答案:

答案 0 :(得分:0)

我认为tictoc将是您的朋友......

我也不会使用while来支持以下内容: (假设已经开始的迭代将被允许完成)

tic;添加到您想要开始的时间,在循环内,否则它将在每次迭代时重置计时器。

for循环中,在开头或结尾添加以下内容

if toc >= 2
    break
end

第一次到达for循环时,break将{{3}},并且已经过了2秒或更长时间