Как представить стимул в течение ограниченного времени и записать ответ, используя Psychtoolbox - PullRequest
0 голосов
/ 24 августа 2018

Для моего эксперимента я хочу представить стимул и некоторые инструкции для участника.Затем, через 2 секунды, я хочу, чтобы стимул исчез, но инструкции остались, пока участник не ответит.Участники должны быть в состоянии ответить сразу после представления стимула и до 10 секунд после его представления.Время ответа будет записано.

С моим текущим кодом участники не смогут ответить до тех пор, пока через 2 секунды (после исчезновения стимула).Есть ли какой-то стимул появляться только в течение 2 секунд, пока на экране остаются инструкции, но участники могут ответить сразу после предъявления стимула?

%Show the instructions and the stimulus   
           Screen('DrawTexture', window, randFaceTexture2);
           DrawFormattedText(window, [instructions1], 'center', 600)

           stimTime = Screen('Flip', window);

           WaitSecs(2);

           %Stimulus disappears but instructions remain 
           DrawFormattedText(window, [instructions1], 'center', 600)
           Screen('Flip', window);

           if GetSecs() <= stimTime + 10
           keyIsDown = 0;
           startTime = GetSecs();
                while 1
                     [keyIsDown, secs, keyCode] = KbCheck;
                     FlushEvents('keyDown');
                     if keyIsDown
                          nKeys = sum(keyCode);
                               if nKeys == 1
                                    if keyCode(yes) || keyCode(no)
                                         reactionTime = 1000*(GetSecs - startTime);
                                         response = KbName(keyCode);
                                         Screen('Flip', window);
                                         break;
                                    elseif keyCode(escKey)
                                         ShowCursor;
                                         fclose(outfile);
                                         Screen('CloseAll');
                                    return 
                                    end 
                                    keyIsDown = 0;
                                    keyCode = 0;
                               end 
                     end 
                end 
           else 
                line3 = 'Sorry you''re out of time';
                DrawFormattedText(window, line3, 'center', 'center');
                Screen('Flip', window);
                keyIsDown = 0;
                rt = 0;
           end

1 Ответ

0 голосов
/ 25 августа 2018

Вместо использования WaitSecs() для управления количеством времени, в течение которого стимул отображается на экране, выключите стимул в цикле проверки ответа, когда истечет соответствующее количество времени. Вот фрагмент, который показывает соответствующие изменения в коде выше. Я опустил детали того, как вы запрашиваете ответ. Кроме того, я думаю, что ваше использование 'if GetSecs () <= stimTime + 10' может не достигать того, что вы хотите, в вашем коде это утверждение будет оценено только один раз и всегда будет истинным. </p>

% time in seconds for the stimulus to remain onscreen
timeForStimulus = 2;
% time for the participant to respond, in seconds
timeToRespond = 10;

%Show the instructions and the stimulus
Screen('DrawTexture', window, randFaceTexture2);
DrawFormattedText(window, [instructions1], 'center', 600)

stimTime = Screen('Flip', window);
stimOnScreen = 1;

while GetSecs() <= (stimTime + timeToRespond)
    % turn the stimulus off, if the stim is on and the stim time has elapsed
    if (stimOnScreen == 1) && (GetSecs() > (stimTime + timeForStimulus))
        %Stimulus disappears but instructions remain
        DrawFormattedText(window, [instructions1], 'center', 600)
        Screen('Flip', window);
        stimOnScreen = 0;
    end

    % poll for keyboard response, etc.

end
...