簡単な質問がありますが、見た目より難しいです。インターウェブで答えが見つかりませんでした:O
Matlabでスクリプトを書いています。私がやりたいことは次のとおりです。
どうすればよいですか? Matlabにどのように言うことができますか:escを押すとき、これを行います...
お時間をいただきありがとうございます!
編集:キーが押されるのを待つ何かを実装するオプションはありません。運転中の車の脚本を書いています。基本的には運転するだけですが、例えばescを押すと運転が止まるはずです。したがって、escキーを押すまで、スクリプトを実行する必要があります。その後、スクリプトを一時停止する必要があります。
Matlabの図では、要求したことを実行するのと同じように機能する'KeyPressFcn'
を定義できます。
コンソールを使用している場合は、MATLABがシングルスレッドであることを回避する必要があります。基本的に、キーが押されているかどうかを確認するには、プログラムフローを停止する必要があります。
ところで-'KeyPressFcn'
を使用する場合も、Matlabが何かが起こったかどうかをチェックするために、一時停止する必要があります。
btw2-この一時停止中にMatlabがキーの押下を読み取るだけでなく、ウィンドウの再描画などのハウスキーピングも実行することも追加する必要があります。
KeyPressFcn
は、イベント駆動型コードの記述を強制するため、優れています。これは一般的に良い考えです!ただし、KeyPressFcn
が適切でないと思われる場合、たとえば、ループで実行し続ける必要があり、キーが押されたかどうかをpollしたい場合は、このソリューションはmatlabのWebサイトに埋め込まれています。
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
私は一度関連するタスクを持っていました、そして私はそれを getkey
フォームmatlabファイル交換で行いました。基本的には、ASCII 1B(10進数で27)をリッスンする必要があります。
getkey
で問題が解決しない場合でも、そのコードを確認して、そのトリックを実行する行を見つけることができます。