Page 1 sur 1
Target: lancer des actions au début et à la fin d'un mouvement d'un axe
Publié : sam. mai 04, 2013 6:23 pm
par lefuneste
Je voudrais faire en sorte que chaque fois que je bouge un certain axe, une touche soit enfoncée au début du mouvement et relachée à la fin (un décalage de quelques 10aines de ms est acceptable entre la fin du mouvement et la fin de l'appui sur la touche)
La fonction KeyAxis ne fonctionne pas pour cela (pas de relâchement de la touche) et la plage de variation du mouvement doit pouvoir être quelconque.
J'ai essayé plusieurs pistes avec la fonction EventHandle mais je n'y arrive pas...
je ne sais par exemple pas quelle syntaxe il faut utiliser pour lancer un REXEC depuis EventHandle ou main()...
Quelqu'un maitriserait TARGET mieux que moi et aurait des idées ?
Publié : sam. mai 04, 2013 7:02 pm
par dimebug
pour t'aider, il faudrait déjà mieux comprendre le contexte. sur quel simulateur ? quelle touche ? cette touche doit elle varier selon si l'axe augmente ou diminue ?
Publié : sam. mai 04, 2013 8:40 pm
par lefuneste
Il s'agit de faire en sorte que le frein du collectif (touche F) de BS2 soit activé des que je bouge l'axe du collectif et relaché des que je ne bouge plus celui-ci.
Ce qui correspond a la réalité (il faut libérer le frein du collectif pour le bouger) et sert au différents mode de stabilisation.
Publié : lun. mai 06, 2013 9:33 am
par dimebug
y'a plusieurs façons de le faire,
tu peux par exemple utiliser un timer qui est déclenché des que l'axe bouge et qui presse la touche F. Une fois ce timer au dessus d'un seul de millisecondes, la touche F est relâché. Sur l'axe, avec un axmap1, tu déclenches une multitude de fois le timer. Tant que l'axe bouge, le timer est reinitialisé, des que tu arrêtes de le bouger, il s'écoule puis relâche la touche F. C'est une des possibilités. C'est pas tres "propre" mais ca devrait marcher.
Sinon il faut faire un filtre de lecture de la valeur de l'axe qui agit si elle évolue ou non.
Exemple : lire la valeur de l'axe, si apres 15 ms la valeur n'a pas changer, relâché F, sinon presser F.
Pour éviter d'envoyer un keyup de F trop souvent, faudra changer la logique et rajouter une mémoire sur l'etat de F :
lire la valeur de l'axe, si après 15 ms la valeur n'a pas changer et si flag 1 vrai, relâché F, sinon presser F et activer le flag 1.
Ca demande a aller regarder ce qui se passe a la fin du manuel de T.A.R.G.E.T (dans les page 50).
En tout cas, ta demande est intéressante
Publié : lun. mai 06, 2013 6:57 pm
par lefuneste
Je pense avoir trouvé un moyen de le faire qui devrait lever les pbs de syntaxe que j'ai rencontré, mais je ne pourrais essayer que ce WE.
L'idée:
Gestion dans l'eventhandle de la gestion de l'axe :
Si debut mouvement on initialise un flag, on enfonce la touche F
Sinon (flag activé) on mémorise la position courante de l'axe ds une variable.
Activation d'une routine en boucle ttes les 200 ms (ou plus a voir) (Rexec avec l'option nostop) qui si le flag est activé et si la derniere position de l'axe est restée la meme que celle mémorisée
desactivera la touche 'f'
Re initialisera le flag
Cette routine sera initialisée via une touche, et un 2eme appui sur cette meme touche arretera le rexec et desactivera la touche 'f' si besoin.
Voila l'idée, il me semble que cela devrait marcher...
Publié : lun. mai 06, 2013 7:32 pm
par dimebug
c'est une bonne piste
Publié : ven. mai 10, 2013 8:05 pm
par lefuneste
Ca marche. J'ai fait un script de démo qui est en PJ.
La fonction de tracking est activée par la touche LTB et déactivée par S4 (shift)+ LTB
La diode 1 est allumée quand le tracking est actif.
La touche 'f' est actionnée et la diode 2 est allumée quand il y a mouvement sur l'axe THR_RIGHT
Il y a au maximum 200 ms entre la fin du mouvement et l'arrêt de l'action sur la touche 'f'
Publié : lun. mai 13, 2013 10:13 pm
par lefuneste
Mon script marche bien, mais j'aurais aimé lancer le REXEC dans le EventHandle (avec la détection du début mouvement).
Malheureusement je n'ai pas trouvé la syntaxe pour ce faire...