Подождите, пока пользователь не нажмет клавишу - PullRequest
0 голосов
/ 21 февраля 2020

Я делаю проект, в котором у меня есть визуальный стимул, который состоит из множества точек, движущихся по экрану в определенном направлении c, и после стимула пользователь должен нажать одну из двух клавиш (либо q 'или' w ').

Я хочу, чтобы пользователь был вынужден нажать клавишу, то есть: стимул (точки, движущиеся в заданном c направлении) воспроизводятся в течение фиксированной продолжительности, затем он останавливается (но точки продолжают двигаться в случайных направлениях), и это просто так до тех пор, пока пользователь не нажмет 'q' или 'w'. После того, как пользователь наконец нажимает клавишу, появляется слуховая обратная связь (правильный или неправильный ответ), и стимул воспроизводится снова. Это повторяется до конца испытаний.

Мой вопрос: как я могу заставить пользователя нажать клавишу после стимула, не останавливаясь? Потому что, если я сделаю паузу, все точки «замирают», вместо того, чтобы двигаться в разных / случайных направлениях в ожидании ответа. Итак, как я могу ждать «вечно / бесконечно», пока пользователь не нажмет клавишу («q» или «w»)?

Мой код:

% present dots in random directions:
for frame = 1:ceil(maxRT*frameRate) %maxRT is 2 seconds
        %calls function related to the drawing of the dots            
        Screen('DrawingFinished', window1.h);
            [flip.waitRT.VBL(block, trial, frame), ...
                flip.waitRT.StimOns(block, trial, frame), ...
                flip.waitRT.FlipTS(block, trial, frame), ...
                flip.waitRT.Missed(block, trial, frame), ...
                flip.waitRT.beampos(block, trial, frame)] = Screen('Flip', window1.h, TimingCnt);
            TimingCnt = flip.waitRT.VBL(block, trial, frameNum) + window1.frameDur - window1.slack; 

        [keyIsDown, secs, keyCode]  = KbCheck();
        keypressed = KbName(keyCode);
        if ischar(keypressed) && ~isempty(keypressed) && keyIsDown
            %checks which key was pressed, compares pressed key with correct key to check if it's correct or wrong, calculates RT, plays auditory feedback
        end
end

1 Ответ

0 голосов
/ 22 февраля 2020

http://psychtoolbox.org/docs/KbWait

Использование функции KbWait через некоторое время l oop с параметром untilTime в качестве 10 мс. Если keyCode является действительным, прервитесь и продолжите соответственно.

Пример псевдокода:

isValid = false;
while ~isValid
    % move dots randomly
    [secs, keyCode, deltaSecs] = KbWait('untilTime', 0.01);
    if (keyCode == 'q') || (keyCode == 'w')
        isValid = true;
    end
end
% do stuff
...