检测键盘输入Matlab

时间:2014-03-03 11:15:29

标签: matlab user-input keyboard-events

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

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

  • 当我按下esc键时,我想要一个帮助对话框弹出,所以我的脚本暂停了。 (所以当我按esc时,我想停止整个脚本运行,以便汽车(我正在编写脚本)停止驾驶)

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

感谢您的时间!

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

4 个答案:

答案 0 :(得分:5)

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中对我有用。缺点是需要关注图形窗口以接收关键事件。

答案 1 :(得分:4)

在matlab图中,您可以定义'KeyPressFcn',其效果类似于您的要求。

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

btw - 同样当你使用'KeyPressFcn'时,你需要暂停一些,以便Matlab检查是否发生了任何事情。

btw2 - 我还应该在这个暂停期间添加Matlab不仅会读取您的按键 - 还会进行一些内务处理,例如重新绘制窗口和内容。

答案 2 :(得分:1)

我经常遇到类似的用例,并且通常喜欢对操纵杆按钮作出反应,因为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

答案 3 :(得分:0)

我有一个相关的任务,我用getkey形式的matlab文件交换完成了。 基本上你会想听它ascii 1B(小数点后27位)

如果getkey无法解决您的问题,您仍然可以查看其代码,也许可以找到适合您的技巧。