Обнаружение Ввода С Клавиатуры Matlab

У меня есть простой вопрос, хотя это сложнее, чем кажется; я не мог найти ответ на паутине: O

Я пишу сценарий в Matlab. Я хочу сделать следующее:

  • когда я нажимаю клавишу esc, я хочу, чтобы всплывал helpdialogue, поэтому мой сценарий приостанавливается. (Поэтому, когда я нажимаю esc, я хочу остановить весь скрипт для запуска, чтобы автомобиль (для которого я пишу сценарий) перестал ездить)

Как мне это сделать? Как я могу сказать Matlab: когда я нажимаю esc, сделайте это...

Спасибо за ваше время, ребята!

EDIT: нет возможности реализовать то, что ждет нажатия клавиши. Я пишу сценарий для вождения автомобиля. Он просто должен ездить в основном, но когда я нажимаю esc, например, он должен прекратить движение. Поэтому сценарий просто должен запускаться, пока я не нажму клавишу esc; затем сценарий должен приостановиться.

4 ответов


в фигуре matlab вы можете определить 'KeyPressFcn' это работает аналогично тому, что вы просите.

Если вы находитесь в консоли, вам нужно обойти, что matlab однопоточен. В основном вам нужно остановить поток программы для проверки нажатия клавиш.

btw-также при использовании 'KeyPressFcn' вам нужно будет сделать несколько пауз, чтобы Matlab проверил, произошло ли что-нибудь.

btw2 - я также должен добавить во время этой паузы Matlab не только прочитает ваш ключ прессы-но также делают некоторые домашние работы, такие как перерисовка окна и прочее.


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. Недостатком является то, что графическое окно должно быть сфокусировано для получения ключевых событий.


Я часто сталкивался с подобными случаями использования и обычно предпочитал реагировать на кнопки джойстика из-за более удобного интерфейса, предоставляемого 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 decimal)

Если getkey не решает вашу проблему вы все еще можете взглянуть на его код и, возможно, найти строку, которая сделает трюк для вас.