Я хочу провести эксперимент, в котором отображаются два типа испытаний (восприятие и невосприятие). Затем участники указывают, восприняли ли они стимулы влево (стрелка влево) или вправо (стрелка вправо). Обнаружение ключа ответа (которое происходит только в определенных испытаниях, например испытании 3 и 4) обеспечивается с помощью функции MATLAB KbCheck. По сути, он делает то, что должен: при запуске третьего или четвертого судебного разбирательства нажатия клавиш (и их обнаружение) должны быть возможны. К сожалению, всегда есть задержка (примерно 1 сек c) между началом пробной версии 3 или 4 и временем принятия нажатия клавиш. Кто-нибудь знает почему? Поскольку я также планирую записывать время реакции (RT), очень важно иметь возможность как можно быстрее указать восприятие (как только начнется испытание 3 или 4).
responseCell = cell (design.total_trials, 4);
TrialCounter = 0;
%%%%%%%%%%% START - PRESENTING THE EXPERIMENT %%%%%%%%%%%%%%%%%%%%%%%%%
% trial for-loop: show experiment
for trl = 1:design.nTrials
% PERCEPT & NON-PERCEPT TRIALS
if design.trialSequence(trl) == 3 || design.trialSequence(trl) == 4
t1 = GetSecs;
RT = 0;
while RT < 2
[keyIsDown, t2, keyCode] = KbCheck;
t3 = GetSecs;
RT = t2-t1;
if (keyIsDown)
key = KbName(find(keyCode));
disp(key); % for debugging
% Escape-route
if strcmp(key, 'ESCAPE') == 1
fprintf('You pressed ESCAPE.\n');
sca();
break;
end
%%%%%%%%%%%%%% PERCEPT TRIAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if design.trialSequence(trl) == 3
TrialCounter = TrialCounter + 1;
if strcmp(key, 'LeftArrow') == 1 % LeftArrow, '1', '1!'
responseCell(TrialCounter, 1:4) = {trl, 'Percept', 1, RT*1000}; % 1 is left
%break;
elseif strcmp(key, 'RightArrow') == 1 % RightArrow, '4', '4$'
responseCell(TrialCounter, 1:4) = {trl, 'Percept', 2, RT*1000}; % 2 is right
%break;
else
responseCell(TrialCounter, 1:4) = {trl, 'Percept wrong', 4, RT*1000};
disp('You pressed the wrong button');
end
disp(TrialCounter); % for debugging purposes
break;
%%%%%%%%%%%% NON-PERCEPT (NP) TRIAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif design.trialSequence(trl) == 4
TrialCounter = TrialCounter + 1;
if strcmp(key, 'LeftArrow') == 1 % LeftArrow, '1', '1!'
responseCell(TrialCounter, 1:4) = {trl, 'NP', 1, RT*1000};
elseif strcmp(key, 'RightArrow') == 1 % RightArrow, '4', '4$'
responseCell(TrialCounter, 1:4) = {trl, 'NP', 2, RT*1000};
else
responseCell(TrialCounter, 1:4) = {trl, 'NP wrong', 4, RT*1000};
disp('You pressed the wrong button');
end
disp(TrialCounter); % for debugging
break; % break in case of NP
end % Percep/NP trial 2,3
%%%%%%%% MISSED PRESSES %%%%%%%%
% belongs to: if (keyIsDown)
elseif t3-t1 > 2 %&& (~keyIsDown)
TrialCounter = TrialCounter + 1;
disp('You missed it!');
if design.trialSequence(trl) == 3
responseCell(TrialCounter, 1:4) = {trl, 'Percept missed', 0, RT*1000};
elseif design.trialSequence(trl) == 4
responseCell(TrialCounter, 1:4) = {trl, 'NP missed', 0, RT*1000};
end
break;
end % if keyIsDown
end % while
end % if Percept or NP
end % for trl