Détecter L'Entrée De Clavier Matlab
J'ai une simple question, même si c'est plus difficile qu'il semble; je ne pouvais pas trouver la réponse sur les interwebs :O
Je suis en train d'écrire un script Matlab. Ce que je veux faire est la suivante:
- Lorsque j'appuie sur la touche echap, je veux un helpdialogue de pop-up, de sorte que mon script s'arrête. (Donc quand j'appuie sur echap, je veux arrêter de l'ensemble du script à exécuter pour que la voiture (gi qui écrit le script s'arrête à la conduite)
Comment dois-je faire? Comment puis-je dire à Matlab: Lorsque j'appuie sur esc, faire...
Merci pour votre temps les gars!
EDIT: C'est pas une option pour mettre en place quelque chose qui n'attend que la pression de touche. Im écrit un script pour un moteur de voiture. Il a juste à faire le tour de coeur, mais quand j'appuie sur esc par exemple, il doit cesser de conduire. Ainsi, le script vient de courir, jusqu'à ce que je appuyer sur la touche esc; ensuite, le script a la pause.
OriginalL'auteur Earless | 2014-03-03
Vous devez vous connecter pour publier un commentaire.
Dans un matlab figure, vous pouvez définir un
'KeyPressFcn'
qui fonctionne de manière similaire à faire ce que vous demandez.Si vous êtes dans la console que vous avez à travailler autour de cette matlab est mono-thread. Fondamentalement, vous devez interrompre le déroulement du programme pour vérifier les pressions de touche.
btw - également lorsque vous utilisez
'KeyPressFcn'
vous aurez besoin de faire quelques pauses, afin que Matlab va vérifier si rien de ce qui s'est passé.btw2 - je dois également ajouter au cours de cette pause Matlab permettra non seulement de lire votre clé presses -, mais aussi faire un peu de ménage comme redessiner sa fenêtre et d'autres choses.
Vous n'avez pas à mettre en pause longue et il n'est pas nécessaire d'interrompre exactement à l'instant (généralement vous maintenez la touche bien de plus). Les saupoudrant d'un peu de
pause(0.01)
par le code fera l'affaire - meilleur combiné avec un non-blocage de lire. Dans Matlab, vous n'obtiendrez pas autour de pause. La seule combinaison de touches qui vont passer à travers pour vous, c'est Ctrl-C - qui n'est pas très utile pour contrôler le flux.Bien à vous essayez de mettre en œuvre certaines de multithreading sur le dessus de matlab. Mais généralement, il est plus facile à mettre en œuvre l'algorithme dans un langage qui prend déjà en charge. (aussi, il sera assez lent dans Matlab). Ou attendre que le langage Matlab prend en charge elle - mais nous parlons des années, voire des dizaines d'années ici.
Je vous remercie beaucoup pour l'aide. En fin de compte j'ai décidé de faire une interface graphique, dans laquelle j'ai utilisé le KeyPressFcn. Et cela a fonctionné 🙂
OriginalL'auteur bdecaf
KeyPressFcn
est bon parce qu'il vous oblige à écrire event-driven code. Qui est généralement une bonne idée! Toutefois, siKeyPressFcn
ne semble pas juste pour vous, par exemple, si vous devez continuer à courir dans une boucle, et vous voulez juste sondage si une touche a été pressée, j'ai trouvé cette solution enterré dans le matlab site web:Ensuite, vous pouvez définir cette propriété à un blanc, et un sondage, si nécessaire.
e.g:
Cela a bien fonctionné pour moi dans 2014b. L'inconvénient est que la fenêtre graphique doit être concentré pour recevoir les événements clés de l'.
OriginalL'auteur Sanjay Manohar
J'ai souvent couru dans les mêmes cas d'utilisation et généralement préféré à réagir aux boutons du joystick en raison de la pratique de l'interface fournie par vrjoystick. Cependant, j'ai récemment écrit une bibliothèque qui fournit une interface similaire pour les entrées de clavier.
C'est non-bloquant et ne nécessite pas de se concentrer sur une figure.
D'Échange De Fichier: http://mathworks.com/matlabcentral/fileexchange/61306-hebirobotics-matlabinput
Github: https://github.com/HebiRobotics/MatlabInput
OriginalL'auteur Florian Enner
J'avais un groupe d'une fois, et je l'ai fait avec
getkey
forme matlab d'échange de fichiers.Bref si vous voulez l'avoir écouter ascii 1B (27 décimal)
si
getkey
ne résout pas votre problème, vous pouvez toujours avoir un coup d'oeil à son code et peut-être trouver la ligne qui va faire l'affaire pour vous.OriginalL'auteur ben