0

我正在尝试收集键盘数据,但无法让 KbWait 工作。在下面的代码中,我试图等待参与者响应,检查他们的响应是否是两个可接受的答案之一,然后继续。只有当参与者按下“j”或“f”时,它才应该继续。

        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 永远不会返回。当我尝试从命令行运行它时,它也不起作用。它只是挂断并拒绝返回,我不得不中断程序。

4

2 回答 2

1

自您发布此消息以来已经九个月了,所以我想您已经找到了某种解决方案。但是我也遇到了这个问题,这就是我发现的:

我浏览了整个 HID 列表: devices = PsychHID('Devices') 在检查每个设备的“usageName”属性时,我发现多个设备被认为是“键盘”,即使我只连接了一个实际的键盘。

然后我尝试将每个索引作为 KbWait 的参数。当我找到正确的那个时,KbWait 起作用了。

于 2015-07-22T14:18:16.010 回答
0

您好,我认为您的问题是 KbWait 功能。

你像 ist KbCheck 一样使用了 KbWait,但是这些函数的输出是不同的

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

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

尝试 KbCheck 比 KbWait 更准确,因为 KbWait 仅每 5 毫秒检查一次键盘

这是我以前有时写的一个函数:working KbCheck

于 2014-11-03T22:42:41.700 回答