Aide - Recherche - Membres - Calendrier
Version complète : Warthog & T.A.R.G.E.T : multi pulse ?
3rd-Wing · Escadre virtuelle DCS > Espace détente > Hardware & Software
Azrayen'
Hello

Une question à ceux qui ont un peu bossé des profils T.A.R.G.E.T pour le HOTAS Warthog (ou autre joy Thrustmaster).

Est-il possible, et si oui comment, de définir une commande telle que :
"Tant que j’appuie sur ce bouton, la commande clavier X est pressée toutes les Y millisecondes" ?

Je n'ai pas trouvé comment faire via TARGET GUI, mais je n'ai pas encore exploré les scripts. Si quelqu'un peut me dire si ça vaut le coup d'y passer un peu de temps...

Pourquoi ce besoin ? J'ai placé "radar distance" sur le China Hat. Dans les chasseurs russes, on va de 10 à 160km. Sur mon X-52 c'était sur un rotacteur, donc rapide d'aller d'un bout à l'autre. Là, je suis obligé de "cliquer" une fois par "cran" de distance à passer (il y a une vingtaine de "crans" : 10km, 12, 14, 16, 18, 20, 25, 30, 35, 40, puis chaque dizaine jusqu'à 150). J'aimerai que si je maintiens le China appuyé, les "crans" de distance défilent (genre tous les dixièmes ou quarts de seconde, à tuner...)

Ça pourrait aussi servir pour le réglage en site du radar de -10 à +10Km delta Z.

Merci d'avance smile.gif

@+
Az'
Gizmo
Salut Az,

J'imagine que tu as utilisé sous TARGET GUI le Type "Pulse" avec dans le "Configuration Options" le "Define pulse event time"...

Je n'ai pas encore eu besoin de m’intéresser à Sript Editor whistling.gif

Oslo
Oui Az je sais comment faire. Il faut que tu choissise Hold au lieu de Pulse dans le type d'action.

Et c'est tout!

++
AnaBolic
Hello Az,

Effectivement Oslo a raison : c'est bien la commande "Old" qui te permets de gérer cela.

Tu peux faire la même chose pour le trim : si tu laisses la commande du chapeau chinois sur le manche sur "pulse" chaque coup de chapeau fera varier ton trim d'un cran. Si tu le colles sur "Old", tant que tu maintiens la commande, il déroullera le trim.

Ce sont des choix assez persos.

Pour ma part, la distance de recherche est gérée via le mic swich avant et arrière !!

++
Oslo
Attention anabo, ne pas confondre Hold et Old wink.gif

Azrayen'
Hello

Oslo & Anabo :
J'aurais dû préciser... "Hold" ne sert pas dans ce cas, j'ai bien essayé.

Hold c'est :
"Tant que j’appuie sur ce bouton, la commande clavier X reste pressée"
Moi je veux :
"Tant que j’appuie sur ce bouton, la commande clavier X est pressée (et relachée, i.e. un pulse) toutes les Y millisecondes" ?

FC2 demande plusieurs inputs pour plusieurs crans. Si on maintient appuyé (via Hold), on ne passe qu'un cran (contrairement au trim, par exemple, où Hold fonctionne bien).
J'en ai déduit que si on maintient appuyé au clavier, c'est pareil (mais j'ai oublié de vérifier ce point spécifique).

Earendil :
Je n'ai pas touché au "pulse event time", car j'avais compris qu'il s'agissait de la durée d'appui, pas de la répétition du pulse...


Merci pour vos retours en tt cas smile.gif
++
Az'
Nounours
Bonjour,

Je n'ai personnellement pas ce souci de portée radar sur le A-10, mais ayant récemment lu le manuel de Target pour un autre motif, je pense que tu devrais peut-être utiliser la commande "Axmap 1" affectée à l'axe "THR_FC" (le réglage de la friction sur la vraie manette des gaz du A-10).
C'est en tout cas ce qui est décrit à la page 27 du manuel français de Target: http://ts.thrustmaster.com/download/access...ual_v1.6_FR.pdf

Bonne chance et à plus,

Ours


Azrayen'
Ah, vi... j'y avais mis le zoom view, mais pourquoi pas. smile.gif
Azrayen'
Ah, bon sinon ce que je cherchais à faire au début semble possible en passant en script via "REXEC".
Faut que je creuse un peu, déjà pour trouver comment transformer un profil "GUI" en profil "Script", avant de bidouiller ce dernier. smile.gif

++
Az'
Azrayen'
Allez zou, ça fonctionne. Merci à Snake (C6).

Avant (code écrit par le GUI, avec MapKeyIOUMD pour tous les boutons, même si là c'est la même fonction pour tous les modes). Un appui = un cran radar distance (malgré le Hold).
CODE
MapKeyIOUMD(&Throttle, CHF, R_CTL+USB[46], R_CTL+USB[46], R_CTL+USB[46], R_CTL+USB[46], R_CTL+USB[46], R_CTL+USB[46]);
MapKeyIOUMD(&Throttle, CHB, R_CTL+USB[45], R_CTL+USB[45], R_CTL+USB[45], R_CTL+USB[45], R_CTL+USB[45], R_CTL+USB[45]);

Aurait pu être écrit plus simplement (sans répétition) ainsi :
CODE
MapKey(&Throttle, CHF, R_CTL+USB[46]);
MapKey(&Throttle, CHB, R_CTL+USB[45]);



Après :
CODE
MapKey(&Throttle, CHF, REXEC(0, 180, "ActKey(PULSE+R_CTL+KEYON+USB[46]);"));
MapKey(&Throttle, CHB, REXEC(0, 180, "ActKey(PULSE+R_CTL+KEYON+USB[45]);"));


La commande est répétée toutes les 180ms tant que le bouton est enfoncé.
Juste bien faire attention à :
- l'ordre PULSE+(modifier)+KEYON+(touche ou commande USB) sinon ça marche pô wink.gif (KEYON est obligatoire manifestement lorsque l'on passe par ActKey qui est une fonction de + bas niveau par rapport à un classique MapKey).
- si plusieurs EXEC ou REXEC, bien séparer les identifiants (ici : zéro, avant le 180) sauf si sur un même axe (et qu'il n'est donc pas possible de lancer les deux en même temps, ce qui est mon cas ici). En revanche, si je modifie ainsi le réglage en site du radar, j'utiliserai REXEC(1, ...

Il ne semble pas possible (ou alors faut sacrément compliquer le code) d'avoir un premier cran "long" puis des ré-exécutions courtes. J'ai pas eu envie de trop me prendre la tête, alors j'ai pris 180ms qui donne une bonne moyenne (permet de passer "un cran" en étant un peu alerte sur la commande, et pas trop lent à passer "plein de crans" lorsqu'il le faut).

++
Az'
AnaBolic
Content que tu es pu trouver ! wink.gif

Je n'ai jamais été aussi loin dans la programmation du Warthog.

++
Azrayen'
Yep smile.gif

CITATION(Azrayen' @ 18 Apr 2012, 03:15) *
Il ne semble pas possible (ou alors faut sacrément compliquer le code) d'avoir un premier cran "long" puis des ré-exécutions courtes. J'ai pas eu envie de trop me prendre la tête, alors j'ai pris 180ms qui donne une bonne moyenne (permet de passer "un cran" en étant un peu alerte sur la commande, et pas trop lent à passer "plein de crans" lorsqu'il le faut).

Quoi que... En y repensant, une commande normale (un pulse), puis le REXEC avec un DELAY, sur la même commande HOTAS, ça doit pouvoir se faire... detective.gif
Gizmo
Super intéressant Az

Donc, si je comprends bien, tu scans ta plage de distance en moins de 3s.
Ce n 'est il pas un peu rapide?
Cela te laisse t -il le temps d'apercevoir quelque chose ? whistling.gif
Azrayen'
Oulà, non, je pense que tu fais erreur. blink.gif

Quelle que soit la façon dont on l'actionne (clavier, axe, joy, multi pulse... massue...), le réglage "Radar distance" ne sert qu'à orienter le pinceau (cône) radar en relation avec le Delta Z (altitude) (réfère toi à la doc de Bug si besoin).

Si je fais le parallèle avec un appareil photo :
- c'est un réglage qui te sert à faire ton cadrage ("cadre le truc 15m plus haut, à 100m de distance")
- ce n'est pas un réglage de "mise au point" (autofocus), ton appareil (radar) voit net de près comme de loin !

Donc non, je ne scanne pas une plage de distance en moins de 3s. Et je n'ai donc aucun souci puisque je n'essaie pas d'apercevoir quoi que ce soit pendant le défilement des crans de distance. innocent.gif

++
Az'
Gizmo
CITATION(Azrayen' @ 18 Apr 2012, 19:17) *

Oulà, non, je pense que tu fais erreur. blink.gif

Quelle que soit la façon dont on l'actionne (clavier, axe, joy, multi pulse... massue...), le réglage "Radar distance" ne sert qu'à orienter le pinceau (cône) radar en relation avec le Delta Z (altitude) (réfère toi à la doc de Bug si besoin).

Si je fais le parallèle avec un appareil photo :
- c'est un réglage qui te sert à faire ton cadrage ("cadre le truc 15m plus haut, à 100m de distance")
- ce n'est pas un réglage de "mise au point" (autofocus), ton appareil (radar) voit net de près comme de loin !

Donc non, je ne scanne pas une plage de distance en moins de 3s. Et je n'ai donc aucun souci puisque je n'essaie pas d'apercevoir quoi que ce soit pendant le défilement des crans de distance. innocent.gif

++
Az'


tongue.gif on se comprend pas visiblement...
Je ne comprends toujours pas ce que tu cherches à obtenir en changeant toute les 180ms de tranche de distance de recherche.

Je reformule:
Si ton "cadrage" varie de 10 à 160 km en quelques seconde, quelle est l'intérêt...
Azrayen'
Le but, c'est de pouvoir passer rapidement d'un valeur à une autre (lointaine), sans multiples appuis. cowboy.gif

On m'annonce un bandit à 80 bornes, 8000m plus haut. Je dois donc régler mon radar sur 80km et Delta Z +8.
Avant :
- allumage radar, distance = 10
- clic, distance = 12
- clic, distance = 14
- clic, distance = 16
- clic, distance = 18
- clic, distance = 20
- clic, distance = 25
- clic, distance = 30
- clic, distance = 35
- clic, distance = 40
- clic, distance = 50
- clic, distance = 60
- clic, distance = 70
- clic, distance = 80

Maintenant :
- allumage radar, distance = 10
- cliiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiic, distance = 80 (à la louche)

180ms, c'est ce que j'ai pris pour l'instant comme compromis entre un défilement rapide (pour atteindre au plus vite la valeur désirée) mais pas trop (pour ne pas la dépasser, savoir arrêter le défilement à temps en relâchant la commande sur le joy).

++
Az'
Azrayen'
Bonsoir

Je poursuis mon idée fixe (et non mon Idéfix, qui est gros ?) puisque mon objectif était d'avoir la possibilité d'avoir "un seul cran" ou "plusieurs crans qui passent rapidement" et pouvoir choisir l'un ou l'autre mode sans se gourer.

Avec ce que j'avais jusqu'ici (= une répétition toutes les 180ms de la commande), il était courant de passer 2 crans même avec un appui relativement bref sur le china hat (puisque c'est lui que j'utilise dans ce test).

J'ai donc essayé la fonction CHAIN qui permet de générer plusieurs événements au même moment.
CODE
    MapKey(&Throttle, CHB, CHAIN(
        PULSE+R_CTL+KEYON+USB[45], // Réduit la distance de recherche radar (d'un cran)...
        D(350), // ... puis au bout de 350ms...
        REXEC(0, 120, "ActKey(PULSE+R_CTL+KEYON+USB[45]);") // ...ré-exécute l'appui toutes les 120ms pour une réduction rapide
        ));

Problème : même sur un appui très court, la fonction "CHAIN" se déclenche, et lance quelques appuis (2 ou 3) supplémentaires via REXEC au bout du DELAY.
C'est donc "pire" qu'avant...

Ze solution est donc d'utiliser non pas CHAIN mais TEMPO. TEMPO sert à faire ce que tout bon A-10C sait gérer "de base", c'est à dire les appuis court et les appuis longs.
La syntaxe est : TEMPO(commande courte, commande longue[, temporisation])
[temporisation] est indiqué entre crochets, car optionnelle. Si vous ne la précisez pas, elle est par défaut de l'ordre de 500ms.
Voici mon code :
CODE
    MapKey(&Throttle, CHB, TEMPO(
        PULSE+R_CTL+KEYON+USB[45],
        REXEC(0, 150, "ActKey(PULSE+R_CTL+KEYON+USB[45]);"),
        200));

Ce code signifie :
Pour le China Hat arrière (CHB, sur le &Throttle) :
- si appui court sur le throttle, déclencher un appui unique sur la commande R_CTL+KEYON+USB[45]
- si appui long sur le throttle, déclencher un appui répété (via REXEC, vu auparavant) sur la même commande R_CTL+KEYON+USB[45] toutes les 150ms.
- un appui est considéré long au bout de 200ms.

Je peux garantir dès à présent que le principe fonctionne. Je vais vérifier ingame si les tempos sont bonnes, avant d'ajouter ces infos au wiki.

++
Az'
Azrayen'
Après tests en vol :
- 200ms entre appui court et long est OK pour cette fonction (et mes goûts)
- en revanche 150ms entre chaque REXEC fait perdre du temps : j'ai baissé la valeur à 100. Moins, on se loupe trop souvent pour la valeur visée.

++
Az'
C'est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquez ici.