KbCheck Psychtoolbox задержка обнаружения ответа - PullRequest
0 голосов
/ 01 августа 2020

Я хочу провести эксперимент, в котором отображаются два типа испытаний (восприятие и невосприятие). Затем участники указывают, восприняли ли они стимулы влево (стрелка влево) или вправо (стрелка вправо). Обнаружение ключа ответа (которое происходит только в определенных испытаниях, например испытании 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
...