检测键盘输入矩阵



我有一个简单的问题,尽管它比看起来更难;我在互联网上找不到答案:O

我正在用 Matlab 编写一个脚本。我想做的是:

  • 当我按 esc 键时,我希望弹出一个帮助对话框,所以我的脚本暂停。(所以当我按 esc 时,我想停止整个脚本运行,以便汽车(我为其编写脚本)停止行驶)

我该怎么做?我怎么能对 Matlab 说:当我按 esc 时,这样做......

谢谢你们的时间!

编辑:实现等待按键的东西是没有选择的。我正在为一辆驾驶汽车写剧本。它基本上只需要四处行驶,但是例如,当我按 esc 时,它应该停止行驶。所以脚本只需要运行,直到我按下 esc 键;然后脚本必须暂停。

KeyPressFcn很好,因为它迫使你编写事件驱动的代码。这通常是一个好主意!但是,如果KeyPressFcn似乎不适合您,例如,如果您必须继续循环运行,并且您只想轮询是否已按下某个键,我发现这个解决方案隐藏在 matlab 网站上:

get(gcf,'CurrentCharacter')

然后,可以将此属性设置为空白,并根据需要对其进行轮询。例如:

finish=false;
set(gcf,'CurrentCharacter','@'); % set to a dummy character
while ~finish
  % do things in loop...
  % check for keys
  k=get(gcf,'CurrentCharacter');
  if k~='@' % has it changed from the dummy character?
    set(gcf,'CurrentCharacter','@'); % reset the character
    % now process the key as required
    if k=='q', finish=true; end
  end
end

这在 2014b 中对我来说效果很好。缺点是图形窗口需要聚焦才能接收关键事件。

在 matlab 图中,您可以定义一个类似于执行您要求的操作的'KeyPressFcn'

如果你在控制台中,你必须解决 matlab 是单线程的。基本上,您需要停止程序流以检查按键。

顺便说一句 - 同样当您使用'KeyPressFcn'时,您需要暂停一些,以便 Matlab 检查是否发生了什么。

btw2 - 我还应该在此暂停期间补充一点,Matlab 不仅会读取您的按键 - 还会做一些内务管理,例如重新绘制其窗口和其他东西。

我经常遇到类似的用例,并且通常更喜欢对操纵杆按钮做出反应,因为vrjoystick提供了更方便的界面。但是,我最近编写了一个库,为键盘输入提供了类似的接口。

% Pause on ESC
kb = HebiKeyboard();
while true
    state = read(kb);
    if state.ESC
      % PAUSE DRIVING
    else
      % DRIVE CAR
    end
end

它是非阻塞的,不需要关注任何特定的数字。

文件交换:http://mathworks.com/matlabcentral/fileexchange/61306-hebirobotics-matlabinput

Github: https://github.com/HebiRobotics/MatlabInput

我曾经有一个相关的任务,我用getkey表单 matlab 文件交换来完成。基本上,您将希望它侦听ascii 1B(27十进制)

如果getkey不能解决您的问题,您仍然可以查看其代码,也许可以找到可以为您解决问题的行。

相关内容

  • 没有找到相关文章