小编CAS*_*LLI的帖子

使 MATLAB 只接受一次 KeyPress

我目前正在尝试在 MATLAB 中编写一个实验。作为它的一部分,它应该接受并记录一个键响应,1 或 0。问题是我只需要在一个特定的时间段记录键,而在实验的其他部分被忽略。响应必须与响应所花费的时间一起记录,并且应该只做一次,最早的(这样一旦用户按下一个键,程序就不会记录后续的)。

到目前为止,我已经尝试了很多方法。这些可能是 nooby 解决方法,但我不擅长面向对象编程。

一种选择是使用

set(gcf,'KeyPressFcn',@KeyDownListener)
Run Code Online (Sandbox Code Playgroud)

KeyDownListener 在哪里

function KeyUpListener(key_hand, key_obj, starting_time)

     toc(starting_time)
     key_pressed = key_obj.Key; return; end
Run Code Online (Sandbox Code Playgroud)

但是,有两个问题:1)我正在努力尝试从这个函数中获取值回到调用脚本;2) 一旦 MATLAB 读取这段set(...)代码,它就会不断捕获按下的每个键。因此,基本上,如果有 100 次试验(每个试验由 5 个阶段组成,其中按键只能在第 4 阶段接受)放入循环中,则set(...)在第 1 阶段的第一次运行时将被忽略-3 在它第一次出现之前,但随后会出现在从第二个开始的所有运行中,在每个阶段,1-5。

然后我尝试将调用脚本和被调用函数都放入从外部脚本调用的另一个函数中,这样一旦控制返回到更高级别的脚本,我就放入另一个

set(gcf,'KeyPressFcn',@mute)
Run Code Online (Sandbox Code Playgroud)

通过哪个mute函数不执行任何操作。这似乎适用于问题 2,但它仍然不允许我获取按键回调的值,并且,由于我使用的pause(..)是让用户有时间进行响应,因此它不会因按下第一个键而中断,它等待括号中为 分配的全部时间pause

matlab key response

1
推荐指数
1
解决办法
414
查看次数

标签 统计

key ×1

matlab ×1

response ×1