2014-10-14 2 views
0

Я пытаюсь собрать данные на клавиатуре, но я не могу получить KbWait для работы. В следующем коде я пытаюсь дождаться ответа участника, проверьте, является ли их ответ одним из двух приемлемых ответов, а затем продолжайте. Он должен продолжаться только тогда, когда участник нажимает «j» или «f».KbWait не регистрирует нажатия клавиши

 response = [];   
     while isempty(response)&&(GetSecs - FlipTimestamp) < 10 
      [keyIsDown, RTsecs, RTkeyCode, deltaSecs] = KbWait; 
      if keyIsDown 
       r=find(RTkeyCode);%this should be the code for the key pressed 
       response=KbName(r);%Figure out what key was pressed 
       rt=num2str(RTsecs-time); %subtract off timestamp from when window was flipped 
       if response == 'f' 
        match_response= false; 
       end 
       if response == 'j' 
        match_response= true; 
       end 
      end 
     end 

Однако KbWait никогда не возвращается. Когда я пытаюсь запустить его из командной строки, он тоже не работает. Он просто зависает и отказывается вернуться, и мне приходится прерывать программу.

+0

Я закончил тем, что исправил его, заменив KbWait на KbWait (-1). Я предполагаю, что по какой-то причине MatLab считает, что где-то есть дополнительная клавиатура, но я не уверен, почему это было бы. – Nathan

ответ

1

Прошло девять месяцев с тех пор, как вы разместили это, так что, я думаю, вы уже нашли какое-то решение. Но у меня также была эта проблема, и вот что я обнаружил:

Я просмотрел весь список HID: devices = PsychHID ('Devices') Когда я изучил каждое свойство 'usageName', я обнаружил, что несколько устройств считались «клавиатурой», хотя у меня только одна фактическая клавиатура.

Затем я попробовал каждый свой индекс в качестве аргумента для KbWait. Когда я добрался до правильного, работал KbWait.

+0

Несмотря на то, что я решил это по-другому (я просто разорвал свой офис, ища клавиатуру Bluetooth, о которой я забыл), я принимаю это как хорошее, общее решение проблемы. – Nathan

0

Привет, я думаю, что ваша проблема - функция KbWait.

вы использовали KbWait как ист KbCheck, но выход из этих функций отличается

[secs, keyCode, deltaSecs] = KbWait([deviceNumber][, forWhat=0][, untilTime=inf]) 

[keyIsDown, secs, keyCode, deltaSecs] = KbCheck([deviceNumber]) 

Попробуйте KbCheck его более точной, чем KbWait, потому что KbWait проверяет клавиатуры только каждые 5 мс

Вот функция Я писал иногда: working KbCheck

Смежные вопросы