首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PsychToolBox中抑制特定的按键

在PsychToolBox中抑制特定的按键
EN

Stack Overflow用户
提问于 2016-12-16 21:28:51
回答 2查看 772关注 0票数 2

我们正在准备一个利克特式的天平。必须允许被试按1-9的数字.我们知道ListenChar,但它抑制了整个键盘。我们怎么能抑制非数字键?

代码语言:javascript
复制
while(1)
    ch = GetChar;
    if ch == 10 %return is 10 or 13
        %terminate
        break
    else
        response=[response ch];
    end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-16 22:22:25

如果您只想接受1-9键:

代码语言:javascript
复制
while(1)
    ch = GetChar;
    if ch == 10 %return is 10 or 13
        %terminate
        break
    elseif (ch>48) & (ch<58) %check if the char is a number 1-9
        response=[response ch];
        pause(0.1) %delay 100ms to debounce and ensure that we don't count the same character multiple times
    end
end

我还添加了一个选项,这样您就不会意外地多次记录单个输入。

票数 0
EN

Stack Overflow用户

发布于 2016-12-18 20:12:18

“心理工具箱”包括通过RestrictKeysForKbCheck限制侦听特定键的功能。

以下代码限制来自1-9的可能输入,加上esc键:

代码语言:javascript
复制
KbName('UnifyKeyNames'); % use internal naming to support multiple platforms
nums = '123456789';
keynames = mat2cell(nums, 1, ones(length(nums), 1));
keynames(end + 1) = {'ESCAPE'};
RestrictKeysForKbCheck(KbName(keynames));

下面是一个简单的块示例:

代码语言:javascript
复制
response = repmat('x', 1, 10); % pre-allocate response, similar to OP example

for ii = 1:10
    [~, keycode] = KbWait(); % wait until specific key press
    keycode = KbName(keycode); % convert from key code to char
    disp(keycode);

    if strcmp(keycode, 'ESCAPE')
        break;
    else
        response(ii) = KbName(keycode);
    end
    WaitSecs(0.2); % debounce
end

RestrictKeysForKbCheck([]); % re-enable all keys
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41192671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档