Vous n'êtes pas identifié(e).
Bonjour à tous !
Étant actuellement contraint par le manque de place pour installer un setup complet de simulation de vol, je cherche à optimiser l'usage d'un joystick.
Dans ce but, je me tournais vers vous afin de savoir s'il était possible de commander plusieurs axes différents à l'aide d'un seul axe physique sur le joystick.
En effet, l'idée serait de me procurer un joystick avec deux commandes de throttle et ensuite d'arriver à commander les props and condition levers en appuyant sur une touche différente mais en bougeant le même axe.
Alors, d'après vous, possible ou pas ? Si oui, des idées ou exemples ?
B.
Hors ligne
Déjà un gros probleme si tu utilises un seul axe pour différentes fonction.
Lorsque par exemple tu es "Prop" au max tu appuis sur ton bouton pour passer ton axe en fonction "Throttle" l'axe est déjà au max (puisque tu viens de "Prop" max). Bon tu met les gaz au ralenti et tu repasses sur "Prop", et bien ceux ci ne sont plus au max mais au minimum.
Tu piges mon explication.
De plus surement des problèmes d'affectation dans FS (peut être avec FsuiPc)
Donc pour moi NON..=N
A+
Christian
Dernière modification par ARCC (17-10-2015 12:54:12)
Un ancien sous-marinier qui à pris de la hauteur.
Hors ligne
Bonjour Christian,
Merci pour ta réponse.
C'est vrai que les phases transitoires posent problème... Bon dans l'idée je suis prêt à faire avec au moins dans un premier temps, pour voir ce que ça donne.
L'idéal serait d'utiliser un axe avec retour au neutre pour que lorsque je pousse dans un sens cela augmente, et dans l'autre cela diminue, mais que lorsque l'axe est en position centrale, ça ne change rien !
Je continue de réfléchir !
B.
Hors ligne
manque de place pour installer un setup complet de simulation de vol
Une solution possible : cliquer ici
P3Dv4.5 : A2A C172 Trainer - Aerosoft A320 Pro - PMDG 777 - FSTramp - Chase Plane - ASP4
HOTAS : CH Fighterstick monté sur Microsoft Force Feedback 2 - VKB Sim T-Rudder Mk.IV Pedals
Hardware : i5 4670K @4.3 Ghz - 32 Go DDR3 - GTX 1080 8 Go - 2K @165 Hz G-Sync - Win10 x64
Hors ligne
Merci pour l'idée !
Le moins que l'on puisse dire est que c'est... original ! Et intéressant.
Je vais chercher voir si des gens ont déjà essayé en simu.
B.
Hors ligne
Je sais que c'est pas donné quand même car il faut un Starter Kit à 199$ USD
Il n'est pas (encore) possible de prendre 1 palette Core (obligatoire) + 1 Slider
P3Dv4.5 : A2A C172 Trainer - Aerosoft A320 Pro - PMDG 777 - FSTramp - Chase Plane - ASP4
HOTAS : CH Fighterstick monté sur Microsoft Force Feedback 2 - VKB Sim T-Rudder Mk.IV Pedals
Hardware : i5 4670K @4.3 Ghz - 32 Go DDR3 - GTX 1080 8 Go - 2K @165 Hz G-Sync - Win10 x64
Hors ligne
Oui, c'est que je voyais sur leur site...
B.
Hors ligne
Bonjour à tous !
Étant actuellement contraint par le manque de place pour installer un setup complet de simulation de vol, je cherche à optimiser l'usage d'un joystick.
Dans ce but, je me tournais vers vous afin de savoir s'il était possible de commander plusieurs axes différents à l'aide d'un seul axe physique sur le joystick.
En effet, l'idée serait de me procurer un joystick avec deux commandes de throttle et ensuite d'arriver à commander les props and condition levers en appuyant sur une touche différente mais en bougeant le même axe.
Alors, d'après vous, possible ou pas ? Si oui, des idées ou exemples ?
C'est possible via un script lua mais ce n'est pas gagné sans certaine connaissance.
Voir ici : http://forum.simflight.com/topic/70239-can-an-axis-change-its-function-depending-on-a-button-state/?hl=%2Bmultiple+%2Baxis
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Merci Pat, c'est exactement cela que je cherchais. Plus qu'Ã se mettre au LUA du coup :)
B.
Hors ligne
Bonjour,
Voilà un problème intéressant !
J'ai commencé par avoir la même réflexion que Christian :
Déjà un gros probleme si tu utilises un seul axe pour différentes fonction.
Lorsque par exemple tu es "Prop" au max tu appuis sur ton bouton pour passer ton axe en fonction "Throttle" l'axe est déjà au max (puisque tu viens de "Prop" max). Bon tu met les gaz au ralenti et tu repasses sur "Prop", et bien ceux ci ne sont plus au max mais au minimum.
... Mais j'ai peut-être une solution pour coder la chose avec une logique qui fonctionnerait.
L'idée serait de s'inspirer de la sortie du mode automanette sur Airbus : les gaz restent inchangés tant que que la manette n'est pas bougée jusqu'au point correspondant au réglage des gaz. Je ne sais pas si le concept est très clair dit comme ça...
Ensuite, je pense qu'il faudrait attribuer un bouton pour activer chaque axe, afin d'éviter toute confusion avec une logique comme "si le bouton est enfoncé, c'est tel axe, sinon tel autre"... Car même si les gaz sont a priori la commande principale, il faudra tout de même revenir à la position précédente avant de pouvoir à nouveau les bouger...
Bon courage !
Squirrel
Hors ligne
Oui, il faudrait arriver à caler une variable qui garderait en mémoire la valeur de l'axe tant que l'on ne repasse par cette valeur avec le bon axe sélectionné, et qui fournisse la valeur de cette variable mémoire à FSUIPC/FSX, etc
B.
Hors ligne
Oui, il faudrait arriver à caler une variable qui garderait en mémoire la valeur de l'axe tant que l'on ne repasse par cette valeur avec le bon axe sélectionné, et qui fournisse la valeur de cette variable mémoire à FSUIPC/FSX, etc
Toujours possible en lua. Il suffit de lire la valeur de l'axe au moment voulu et de la stocker dans un offset disponible (66C0 66FF est une plage disponible "utilisateur" dans FSUIPC) au format SW (2 octets signés). Elle sera récupérable en relisant cet offset.
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Je viens de traduire mon idée en pseudo-code :
Variables à déclarer :
varChangement (au changement d'axe)
varAxeJoystick (la valeur de la position de ton joystick)
varChoixMode (par exemple : 0 pour les gaz, 1 pour la mixture et 2 pour l'hélice)
Ensuite, disons que l'on va utiliser les informations suivantes en lecture et écriture pour FSX :
fsxAxeGaz
fsxAxeMixture
fsxAxeHelice
On arrive maintenant au coeur du code : ce qui suit est à exécuter aussi souvent que possible (à chaque image ou à 6Hz) :
Si le bouton actuellement pressé est le 0:
Alors varChoixMode = 0 et varChangement = 1
Si le bouton actuellement pressé est le 1:
Alors varChoixMode = 1 et varChangement = 1
Si le bouton actuellement pressé est le 2:
Alors varChoixMode = 2 et varChangement = 1
Si varChangement == 1:
Si varChoixMode == 0:
Si fsxGaz == varAxeJoystick:
Alors varChangement = 0
Si varChoixMode == 1:
Si fsxMixture == varAxeJoystick:
Alors varChangement = 0
Si varChoixMode == 2:
Si fsxHelice == varAxeJoystick:
Alors varChangement = 0
Si varChangement == 0:
Si varChoixMode == 0:
fsxGaz = varAxeJoystick
Si varChoixMode == 1:
fsxMixture = varAxeJoystick
Si varChoixMode == 2:
fsxHelice = varAxeJoystick
A priori, ça fonctionne sur le principe, mais il faudra faire attention car certains axes seront peut-être en pourcents alors qu'un autre sera en "nombre de pas".
Comme Pat_59, le lua me semble la bonne solution
Si je ne me trompe pas, il est d'ailleurs possible d'exécuter un script lua avec FSUIPC... Je dis des bêtises ?
Dernière modification par Squirrel (18-10-2015 14:03:51)
Hors ligne
En complément de la réflexion de Squirrel:
L'usage de plusieurs boutons différents pour activer l'axe voulu sur l'axe qui sera effectivement employé est intéressant mais nécessiterait plusieurs boutons disponibles.
Pourquoi ne pas envisager un seul bouton qui, par appui successif, sélectionnerait la fonction désirée. Une petite fenêtre lua "Display" pourrait indiquer quel serait l'axe effectif à chaque pression sur le bouton.
Edit: Par rapport à ton message précédent, non pas de bêtise. FSUIPC est capable d'exécuter les scripts lua.
Dernière modification par Pat_59 (18-10-2015 14:04:28)
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Très bonne idée Patrick !
Dans ce cas il faudrait un peu modifier ce que je propose ci-dessus.
Personnellement, je remplacerais alors "Si le bouton actuellement pressé est le 0: [...] Alors varChoixMode = 2 et varChangement = 1" par :
Si le bouton est pressé:
Alors varChangement = 1
et varChoixMode = varChoixMode + 1 (on augmente de 1 la variable)
Si varChoixMode == 4:
Alors varChoixMode = 0 (car on a que 3 modes et non 4)
Afficher la valeur de varChoixMode (0 et on a sélectionné les gaz, 1 pour la mixture...)
edit : merci pour la confirmation
Dernière modification par Squirrel (18-10-2015 14:09:44)
Hors ligne
Et ben, vous bouillonnez les amis
On pourrait aussi imaginer un switch : dans un sens pour incrémenter et dans l'autre pour décrémenter afin de ne pas avoir forcément à boucler pour choisir le bon axe.
Merci pour l'algorithme, c'est plus la syntaxe qui va me manquer. Mais je vais m'y mettre.
B.
Hors ligne
Exactement mais en langage lua
Il faudrait également mémoriser par la méthode expliquée plus haut chaque dernière position d'axe dans la fonction voulue afin d'autoriser uniquement le déplacement de l'axe qu'une fois revenu sur la précédente valeur (avec une certaine marge pour prendre en compte les "vibrations" possibles de l'axe).
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Mais c'est un plaisir
On pourrait aussi imaginer un switch : dans un sens pour incrémenter et dans l'autre pour décrémenter afin de ne pas avoir forcément à boucler pour choisir le bon axe.
C'est aussi faisable !
Dans ce cas, on pourrait considérer que le switch (momentané donc), est comme deux boutons.
Alors il suffit de doubler le code précédent, en ayant un "si le bouton 1 est pressé", et un "si le bouton 2 est pressé"
Pour le premier (par exemple), tu fais "varChoixMode = varChoixMode + 1" et pour l'autre "varChoixMode = varChoixMode - 1"
Pour le 2e, on dit ensuite que si c'est égal à -1, on met la variable égale à 3.
Mais je crois que tu as compris le principe
Hors ligne
Il faudrait également mémoriser par la méthode expliquée plus haut chaque dernière position d'axe dans la fonction voulue afin d'autoriser uniquement le déplacement de l'axe qu'une fois revenu sur la précédente valeur (avec une certaine marge pour prendre en compte les "vibrations" possibles de l'axe).
Ah oui, c'est important ça ! Avec ma technique, il faut que l'axe passe pile par la bonne valeur... Il faut sans doute se donner un peu de marge.
Donc remplacer "Si fsxGaz == varAxeJoystick" par quelque chose comme :
Si ( (fsxGaz >= varAxeJoystick - 10) et (fsxGaz <= varAxeJoystick + 10) )
Hors ligne
FSUIPC donne les valeurs d'axe entre -16385 et 16385 avec un pas de 256.
Adopter une valeur de +ou- 512 dans la tolérance me paraît de bon aloi.
Dernière modification par Pat_59 (18-10-2015 14:32:25)
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Ceci donne un rapport d'environ 3% à la course totale... Nettement mieux pensé que mes bêtes 0.03%
Faut pas te dévaluer quand même
Je réfléchis d'après les indications que donne Pete Dowson sur la façon dont il interprète les axes dans FSUIPC.
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
A noter que pour que tout ceci fonctionne de la manière attendue, il faudra attribuer les axes nécessaires via "direct FSUIPC calibration" et que ces axes soient effacés des commandes FSX.
Si il y a besoin d'une calibration, il faudra sélectionner l'axe désiré via la programmation lua avant de le calibrer dans FSUIPC.
En partant de ce principe une calibration différente pourra être envisagée pour chaque fonction (même si c'est le même axe réel), FSUIPC en tiendra compte et fera le distingo.
Dernière modification par Pat_59 (18-10-2015 15:15:56)
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne
Bon, j'ai un premier jet. N'oubliez pas les points suivants :
- je ne connais pas le LUA
- je ne suis pas un expert de FSUIPC, i.e les offsets ne sont pas forcément les bons
AxisSelection = ipc.btnPress(x)
if AxisSelection == true
then
if ControlSelected == throttle
then AxisRValue = ipc.readDBL("088C") ; AxisUValue = ipc.readDBL("0924") ; ipc.writeDBL("66C0", AxisRValue) ; ipc.writeDBL("66C1", AxisUValue) ; ControlSelected = prop
elseif ControlSelected = prop
then AxisRValue = ipc.readDBL("088E") ; AxisUValue = ipc.readDBL("0926") ; ipc.writeDBL("66C2", AxisRValue) ; ipc.writeDBL("66C3", AxisUValue) ; ControlSelected = mixture
elseif ControlSelected = mixture
then AxisRValue = ipc.readDBL("0890") ; AxisUValue = ipc.readDBL("0928") ; ipc.writeDBL("66C4", AxisRValue) ; ipc.writeDBL("66C5", AxisUValue) ; ControlSelected = throttle
end
end
while ControlSelected == throttle and AxisRValue >= "66C0" + 512 or AxisRValue <= "66C0" - 512 or AxisUValue >= "66C1" + 512 or AxisUValue <= "66C1" - 512
then ipc.writeDBL("088C", "66C0") ; ipc.writeDBL("0924", "66C1")
end
while ControlSelected == prop and AxisRValue >= "66C2" + 512 or AxisRValue <= "66C2" - 512 or AxisUValue >= "66C3" + 512 or AxisUValue <= "66C3" - 512
then ipc.writeDBL("088E", "66C2") ; ipc.writeDBL("0926", "66C3")
end
while ControlSelected == mixture and AxisRValue >= "66C4" + 512 or AxisRValue <= "66C4" - 512 or AxisUValue >= "66C5" + 512 or AxisUValue <= "66C5" - 512
then ipc.writeDBL("0890", "66C4") ; ipc.writeDBL("0928", "66C5")
end
N'hésitez pas à commenter, critiquer ou autre.
Merci à vous !
B.
Hors ligne
Quelques remarques:
Tu n'utilises pas le bon format d'offset. "DBL" s'écrit et se lit sur 64bits (8 bytes ou octets). Si tu écris dans le format DBL sur l'offset 66C0, l'écriture occupera les offsets 66C0 à 66C7. Le prochain disponible sera 66C8 et non 66C1.
De même si tu lis l'offset 088C dans ce format DBL, c'est la plage 088C-0894 qui sera lue. Le résultat risque d'être surprenant.
Il faut se faire une représentation binaire des valeurs utilisées pour connaître la place qu'elles occuperont en terme de bit et en déduire le format nécessaire.
Pour les axes dont la valeur est comprise là plupart du temps entre -16385 et 16385 on utilise le format "Word" signé sur 2 octets représenté par le sigle SW; S pour signé (la valeur peut être négative ou positive), U pour "unsigned" si la valeur est toujours positive et W pour "Word" qui occupe 16 bits ou 2 octets (byte en anglais).
D'autre part tu vas lire des valeurs d'offset qui correspondent à la position de la "manette" dans le simulateur. Il n'est pas du tout sûr (et c'est même certain) qu'elles reflètent exactement la valeur de ton axe à ce moment précis.
Il vaudrait mieux lire la valeur présente de l'axe. La librairie lua de FSUIPC le permet à condition que l'axe soit déclaré dans le fsuipc4.ini. Il s'agit de l'instruction "ipc.axis("X") ou X représente la lettre de l'axe reconnu par FSUIPC.
Ainsi en écrivant n=ipc.axis("Z"), la variable n contiendra la valeur de l'axe Z au moment de l'instruction.
De plus un script lua ne fonctionne pas tout seul, il faut lui donner quelque chose à surveiller (event) pour qu'il se déclenche au moment opportun. Dans ce cas la surveillance du bouton qui servira au changement d'attribution de l'axe devrait suffire.
Dans l'état actuel ton script ne fonctionnera pas.
Pour des raisons de lisibilité, j'éviterai de placer les instructions les unes à la suite des autres séparées par des ";" (ce qui n'est même pas nécessaire en lua). Une ligne par instruction avec une indentation ce qui permet de ne pas se perdre dans les boucles ou conditions, cela facilitera le "debuggage" en cas de besoin.
Bon courage et je reste à "l'écoute".
Amicalement Patrick[img align=D]http://www.pilote-virtuel.com/img/members/8639/P3DV3.jpg[/img]
Configuration: Intel I7 3770k OC 4,4 GHz, CM Asrock Z77 Extrem 9
8Gb Gskill DDR3 2133, CG Nvidia 980 GTX TI 6Gb, Windows 8 64bits
P3D V3.3, X52 Pro, CH Product "Éclipse", TIR 5 etc....
Hors ligne