我有一个实验,收集按键(‘x’或’n’)和响应刺激显示的反应时间。如果参与者每次试用按下任一按钮,则实验运行正常。 …
功能 KbName 通过键码矢量返回键输入的名称字符串( key_name = KbName([21 22]) ),或KbCheck返回的逻辑向量。
KbName
key_name = KbName([21 22])
如果仅提供密钥/为True,则将其作为字符串返回。但是,如果同时按下多个键,它将作为字符串的单元格数组返回。
例如,查看输出:
% for key name consistency across operating systems KbName('UnifyKeyNames') % one key KbName(21) ans = r % more than one key KbName([21 22]) ans = 1��2 cell array 'r' 's'
您的问题是,当同时按下多个键时(相对于键检查循环), keyStroke 是包含按下的键的单元格数组。您似乎在大多数代码中正确处理单元格数组,但调用除外 fprintf ,它需要一个字符串,而不是一个字符串的单元格数组。
keyStroke
fprintf
如果要保存所有按键的记录,可以将字符串的单元格数组转换为单个字符串,并在元素之间添加分隔符,例如在调用之前添加以下行。 fprintf :
if iscell(keyStroke) keyStroke = strjoin(keyStroke, '_'); end
但是,请记住,您可能希望更改实验的逻辑以拒绝按下两个键的试验,或者以不同于单个键响应的方式对待它们。您当前使用“左”键优先,换句话说,如果参与者按下了左键并且目标是“X”,即使右键也被按下,试验也会被标记为正确。相反,如果参与者按下了左键并且目标是“N”,则即使也按下了右键,试验也会被标记为不正确。