为什么 Psychtoolbox 中的 KbCheck 没有注册键盘输入?
Why is KbCheck in Psychtoolbox not registering keyboard input?
我正在尝试 运行 一个用 Psychtoolbox-3 编码的程序,它应该注册一个按键。但是当我 运行 它时,即使只是命令 window 的这一部分,它也不会响应 E、P 键(或任何键),我必须使用 Ctrl-C 停止操作。我尝试将其更改为 {e, p}(这是我使用 KbName('KeyNames') 找到的名称),但它不起作用。
相同的代码适用于我主管的计算机 - 我正在使用 Mac 和 OS 11.1.
KbName('UnifyKeyNames');
keyresp = KbName({'E','P'});
key = 0;
while ~key
[key,tkey] = CheckKeyPress(keyresp);
end
CheckKeyPress 是这个函数(并且有效 - 给出输出 0):
function [key,tkey] = CheckKeyPress(whichkeys)
if nargin < 1 || isempty(whichkeys)
whichkeys = 1:256;
end
key = 0;
[iskeydown,tkey,keys] = KbCheck(-1);
if any(keys(whichkeys))
key = find(keys(whichkeys),1);
end
end
我也试过查看 PsychHID('Devices'),我的键盘在那里(没有其他键盘)。
感谢您的帮助!
一直是MacOs的一大痛点。我使用此代码:
close all
clear all
clc
ListenChar(0);
Devices=PsychHID('Devices');
keyboardsIDs = [];
for iiD = 1:numel(Devices)
try
KbQueueCreate(Devices(iiD).index);
KbQueueStart(Devices(iiD).index);
keyboardsIDs(end+1,1) = Devices(iiD).index;
end
end
stopScript = 0;
while ~stopScript
for iiD = 1:numel(keyboardsIDs)
[keyIsDown, firstPress]=KbQueueCheck(keyboardsIDs(iiD));
if keyIsDown
keyID = find(firstPress)
disp(keyID)
if any(keyID ==20), stopScript =1; end
end
end
end
for iiD = 1:numel(keyboardsIDs)
KbQueueStop(keyboardsIDs(iiD));
end
ListenChar();
更新
这是一个有点肮脏的解决方法,但它适用于任何情况。
按'q'退出循环
已解决!这是一个简单的 mac 问题 :)
在我尝试 KbQueueCreate 并收到一条错误消息后,我在另一个线程上发现了相同的错误消息 - 唯一的问题是我必须允许 Matlab 访问笔记本电脑上的键盘输入。
设置 - 安全和隐私 - 输入监控
我正在尝试 运行 一个用 Psychtoolbox-3 编码的程序,它应该注册一个按键。但是当我 运行 它时,即使只是命令 window 的这一部分,它也不会响应 E、P 键(或任何键),我必须使用 Ctrl-C 停止操作。我尝试将其更改为 {e, p}(这是我使用 KbName('KeyNames') 找到的名称),但它不起作用。 相同的代码适用于我主管的计算机 - 我正在使用 Mac 和 OS 11.1.
KbName('UnifyKeyNames');
keyresp = KbName({'E','P'});
key = 0;
while ~key
[key,tkey] = CheckKeyPress(keyresp);
end
CheckKeyPress 是这个函数(并且有效 - 给出输出 0):
function [key,tkey] = CheckKeyPress(whichkeys)
if nargin < 1 || isempty(whichkeys)
whichkeys = 1:256;
end
key = 0;
[iskeydown,tkey,keys] = KbCheck(-1);
if any(keys(whichkeys))
key = find(keys(whichkeys),1);
end
end
我也试过查看 PsychHID('Devices'),我的键盘在那里(没有其他键盘)。
感谢您的帮助!
一直是MacOs的一大痛点。我使用此代码:
close all
clear all
clc
ListenChar(0);
Devices=PsychHID('Devices');
keyboardsIDs = [];
for iiD = 1:numel(Devices)
try
KbQueueCreate(Devices(iiD).index);
KbQueueStart(Devices(iiD).index);
keyboardsIDs(end+1,1) = Devices(iiD).index;
end
end
stopScript = 0;
while ~stopScript
for iiD = 1:numel(keyboardsIDs)
[keyIsDown, firstPress]=KbQueueCheck(keyboardsIDs(iiD));
if keyIsDown
keyID = find(firstPress)
disp(keyID)
if any(keyID ==20), stopScript =1; end
end
end
end
for iiD = 1:numel(keyboardsIDs)
KbQueueStop(keyboardsIDs(iiD));
end
ListenChar();
更新
这是一个有点肮脏的解决方法,但它适用于任何情况。
按'q'退出循环
已解决!这是一个简单的 mac 问题 :)
在我尝试 KbQueueCreate 并收到一条错误消息后,我在另一个线程上发现了相同的错误消息 - 唯一的问题是我必须允许 Matlab 访问笔记本电脑上的键盘输入。
设置 - 安全和隐私 - 输入监控