Vous n'êtes pas identifié(e).
Je te confirme, cela va se corser.
En effet pour le moment, tu ne testes que l'interrupteur batterie (battery switch).
Ta variable testVar contient toutes les positions de tes boutons et correspond à la somme de ceux-ci.
Si tu actionnes un autre switch, la valeur de cette variable changera en prenant en compte cette nouvelle position mais si tu actionnes à nouveau ton battery switch tu ne retrouveras pas la ou les valeurs que tu as notées. Donc ton script ne marchera plus (uniquement basé sur une valeur à un instant T).
La solution consiste à repérer quel bit est modifié dans l'offset quand on bascule tel ou tel interrupteur. Chaque bouton utilise un seul et unique bit de l'offset qui en comprend 32 et sa place dans l'offset ne change jamais et heureusement.
Ensuite, il est possible de tester avec l'instruction andLogic (comme l'a dit notre ami Dreambox62) uniquement le bit en question et non toute la valeur de l'offset.
Comme Dreambox62, que je me permettrais d'appeler Philippe à l'avenir si il me le permet, s'est proposé pour t'expliquer cette instruction, je lui en laisse le soin.
Tu n'es pas au bout de tes peines mais on progresse.
PS : Je ne vois toujours pas l'utilité des macros, nulle part tu n'y fais appel ( ipc.macro(xxxxx) )
Dernière modification par Pat_59 (06-11-2014 22:03:06)
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
Hello!
Suite à vos indications, je me suis souvenu de cet article : http://forum.simflight.com/topic/76972- … lti-panel/
Voici ce que j'en ai déduit pour mon script : (qui ne fonctionne pas...). Pour simplifier sa lecture j'ai supprimé les lignes non indispensables.
function HID()
testVar = ipc.readUD(0x66C0)
if testVar == logic.And(testVar,1) then
MasterBat=ipc.readLvar('Battery1Switch')
if MasterBat == 1 then
ipc.writeLvar('Battery1Switch', 0)
else
ipc.writeLvar('Battery1Switch', 1)
end
end
if testVar == logic.And(testVar,2) then
MasterALT=ipc.readLvar('Eng1_GeneratorSwitch')
if MasterALT == 1 then
ipc.writeLvar('Eng1_GeneratorSwitch', 0)
else
ipc.writeLvar('Eng1_GeneratorSwitch', 1)
end
end
if testVar == logic.And(testVar,3) then
SetVar=ipc.readLvar('AvionicsElecPower')
if SetVar == 1 then
ipc.writeLvar('AvionicsElecPower', 0)
else
ipc.writeLvar('AvionicsElecPower', 1)
end
end
endevent.offset(0x66C0, 'UD', 'HID')
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:26:34)
Hors ligne
Bonjour à vous deux,
C'est la solution de Philippe qui est la bonne.
Dans mon post précédent, j'ai écrit andLogic. Il fallait lire logicAnd mais vous avez rectifié de vous-même.
@ Philippe. Suite à l'édition de ton message, bien entendu que je peux partager mes connaissances dans ce langage et ce sera avec grand plaisir. Je le pratique depuis presque 2 ans mais, même si j'ai beaucoup progressé, je ne pense quand même pas en être un expert. J'en apprends encore presque tous les jours.
Dernière modification par Pat_59 (07-11-2014 09:07:29)
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
Philippe,
Je vais tester ton script (qui en plus a l'avantage d'être considérablement allégé) ...
Une liste des variables de ton avion A2A sera la bienvenue car je n'ai pas ce zinc !
Le lien vers les variables du C172 de A2A .
Un lien vers les contrôles de FSX.
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:27:09)
Hors ligne
@ Philippe,
Dis-moi ce que je peux faire pour toi.
Les >K, c'est du XML
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
Malheureusement le script ne fonctionne pas; ou pour être précis, seul le Master Bat fonctionne.
Du coup j'ai essayé de modifier le script en plaçant le master ALt en première position, mais c'est idem. Seul le Master BAT est fonctionnel. Je dois aussi travailler un peu ... Je verrai ça en fin d'après midi ...
c'est quoi ce truc, cette déclaration ? >K
Il faut que je regarde ça sur les forums de A2A.
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:27:51)
Hors ligne
Sur FSX lorsque on code une jauge en XML on pouvait utiliser >K ou >K
Sur P3D, la seule notation qui est prise en compte est la deuxième >K
Pour la signification il s'agit d'une affectation dans la variable K.
(>K:TOGGLE_ELECT_FUEL_PUMP1) permet de modifier la variable de type TOGGLE (0 ou 1) "fuel pump" de manière à ce qu'elle change d'état
@+ Didier
W10 Pro 64b Build 22H2 - Boitier HAF 932 - Z390 STRIX-F - 9900K - 2x16 Go - NVidia 3060 Ti 8 Go - Alim Corsair 800W - Ecran 34" - NVidia Studio ready 536.23
P3D v5.4 = http://www.pilote-virtuel.com/img/members/53/P3Dv5HF-Reglages-A.jpg - MSFS Deluxe/STORE - X-Plane 12B
Hors ligne
je viens d'imprimer le document FSUIPC Lua Library Reference
C'est formidable le travail qu'a fait Peter DOWSON
Dommage que ce document n'existe pas en Français (Je bloque un peu avec l'Anglais Technique)
mais ça vaux le coût de ce donner du mal alors je vais tout traduire même si ça me prends le peu de temps que j'ai
DREAMBOX
Dernière modification par dreambox62 (07-11-2014 11:42:42)
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:28:05)
Hors ligne
Pat_59 a écrit :@ Philippe,
Dis-moi ce que je peux faire pour toi.
Les >K, c'est du XML
Je ne comprends pas les variables du documents d'olivier sur son C172 A2A
et je crois bien que le problème viens de lÃCordialement DREAMBOX
Tout ce qui est codé en XML n'utilise pas de variables (Lvar) spécifiques au C172 A2A. On utilisera les contrôles FSX correspondants.
Exemple pour l'avionic master switch, on utilisera le contrôle FSX 66701: ipc.control(66701,1) pour On ou ipc.control(66701,0) pour Off.
Idem pour les lights (strobe, nav, etc...)
Pour résumé, dans la liste fournie par Oliver77 (le PDF):
Tout ce qui commence par L concerne une Lvar propre au C172 A2A,
Ce qui commence par K concerne des contrôles FSX.
Enfin ce qui commence par A concerne des offsets FSUIPC qui permettent de lire (et pour certains d'être écrits) directement dans FSX (valeur d'un cap ou d'une altitude, la liste est longue....)
Dernière modification par Pat_59 (07-11-2014 12:27:59)
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
N'ayant pas le Saitek Switch Panel, je suis obligé d'interpréter un peu vos résultats.
Si je me réfère à ce que donne le lien donné par Oliver77 (http://forum.simflight.com/topic/76972-lua-programs-to-access-your-saitek-radio-switch-and-multi-panel/), je m’aperçois que la commande de train est sur deux bits et non sur un seul: bit n°19 à 1 et bit n° 18 à 0 si la commande est sur Gear Down, bit N° 19 à 0 et bit n° 18 à 1 si le levier se trouve sur Gear up. Idem pour le magnéto selector qui utilise le bit n° 13 au bit N°17 selon sa position (de Off à Start) le bit correspondant étant à 1 en fonction de la position.
Pour être sûr d'évaluer le bon "bit", je vous propose une méthode en principe imparable.
Mettez tous les switchs sur Off (le levier de train sera sur down et magnéto sur off), en relevant l'offset 0x66C0 vous devriez obtenir la valeur 532480 qui correspond, en décimal, au bit N° 19 qui est à 1 (gear down) + le bit N° 13 qui est à 1 également (Magnéto sur Off), le reste est sur 0.
Afin de visualiser cette situation, rien de plus simple mais parfois on y pense pas. Utiliser la calculatrice de base windows (calc.exe) et placer la via le menu "vue" en mode "programmeur".
Dans ce mode, cocher sur le côté gauche haut "Dec", cela permettra de rentrer les données en décimal. Puis, sur le même côté mais en bas, sur Dword (affichage des données en mode 32 bits).
La fenêtre du haut indiquera votre entrée clavier en décimal (la valeur testVar par exemple), celle juste en dessous vous donnera cette même valeur convertie en binaire.
A partir de là , vous pourrez voir quels bits sont à 1 et lesquels sont à 0 et compter leurs positions respectives depuis la droite et en partant de 0.
Pour savoir si tel bit est à 1 ou à 0, on utilise l'instruction logic.And(x,y) où :
x correspond à l'offset que l'on contrôle (dans notre exemple la variable testVar qui contient l'offset UD 0x66C0)
y correspond à la valeur en puissance de 2 de la position du bit à contrôler. Exemple : on veut contrôler le bit n°10, la valeur de y sera 2^10 c'est à dire 1024.
Ensuite la comparaison s'effectue par rapport à 0 et non pas par rapport à 1.
Si la valeur rendue par logicAnd(x,y) = 0, le bit est à 0. Si le bit est à 1, la fonction peut renvoyer n'importe quel nombre dépendant de la valeur des bits suivants.
A utiliser comme ceci pour le bit N°1, y=2^1=2
if logic.And(testVar,2) ~= 0 then
ipc.writeLvar('Eng1_GeneratorSwitch', 1)
else
ipc.writeLvar('Eng1_GeneratorSwitch', 0)
end
Si vous avez besoin de précisions, n'hésitez pas.
Dernière modification par Pat_59 (07-11-2014 19:42:42)
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
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:28:35)
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:28:48)
Hors ligne
Bonjour Philippe,
Dans un de tes posts plus haut, tu fais référence au document FSUIPC LUA Library.
Ce document ne fait référence qu'aux fonctions spécifiques que Pete Dowson a ajouté aux librairies LUA existantes afin de mieux interagir avec le simulateur (FSX ou P3D). Il ne reprend évidemment pas toutes les instructions disponibles dans ce langage.
Voici un site (en français) qui te donnera un aperçu des possibilités du LUA (fonction, syntaxe, etc..)
http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html
Pour ma part, j'ai toujours trois documents sous le coude disponibles dans le répertoire Documentation de FSUIPC.
La liste de tous les offsets (adresse, longueur et contenu), 63 pages. Une mine d'or.
La liste de tous les contrôles que l'on peut facilement retrouver dans le "tracer" de Linda
Et enfin le document auquel tu faisais allusion, la librairie LUA pour FSUIPC.
Concernant la calculatrice, je suis content que l'astuce te plaise (le binaire n'est pas notre langage habituel) et, ne t'inquiète pas, j'utilise aussi beaucoup le papier (la vieille école sans doute).
Cela me permet de faire un plan de ce que je désires obtenir et la façon d'y parvenir. Inutile de se lancer tête baissée sur le clavier si au bout de quelques lignes de programmation on ne sait plus où on en est.
Je te souhaite un bon week-end et une bonne continuation dans l'apprentissage du LUA (si tu veux prendre contact, n'hésite pas. Tu as mon mail ou les MP).
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
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:29:07)
Hors ligne
@ Pat et Philippe :
Un grand merci encore pour votre aide et le partage de vos connaissances ! Je suis en week-end familial et je ne peux tester pour l'instant... Je verrai ça Lundi ou Mardi.
En revanche, je dois avouer que malgré la calculatrice, le décryptage des bits n'est pas limpide pour moi ... Ceci dit j'ai essayé très brièvement car peu de temps.
Je vous souhaite un excellent week-end.
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:29:24)
Hors ligne
Bon ... je pense avoir compris la lecture des bits c*via la calculatrice Windows. Effectivement, cela permet de décoder plus aisément les infos dont nous avons besoin.
J'ai donc modifié le script en conséquence pour la première rangée de switchs. Bien sûr, il y a un petit souci :
Le Fuel Pump déclenche aussi le Pitot Heat, et vice-versa. Je suppose donc que je fais encore une bourde ... Mais je ne vois pas où. J'ai vérifié les offsets, et ce sont à priori les bons ...
function HID_Siwtch_Panel()
testVar = ipc.readUD(0x66C0)
-- Master Battery Bit 0 : 2^0 = 1
if logic.And(testVar,1) ~= 0 then
ipc.writeLvar('Battery1Switch', 1)
SetVar=ipc.readLvar('Battery1Switch')
ipc.display('Battery : '..SetVar,10)
else
ipc.writeLvar('Battery1Switch', 0)
SetVar=ipc.readLvar('Battery1Switch')
ipc.display('Battery : '..SetVar,10)
end
-- Master Alternator Bit 1 : 2^1 = 2
if logic.And(testVar,2) ~= 0 then
ipc.writeLvar('Eng1_GeneratorSwitch', 1)
SetVar=ipc.readLvar('Battery1Switch')
ipc.display('Generator : '..SetVar,10)
else
ipc.writeLvar('Eng1_GeneratorSwitch', 0)
SetVar=ipc.readLvar('Battery1Switch')
ipc.display('Generator : '..SetVar,10)
end
-- Avionics Bit 2 : 2^2 = 4
if logic.And(testVar,4) ~= 0 then
ipc.control(66701)
-- SetVar=ipc.readUD(66701)
-- ipc.display('etat avionics : '..SetVar,10)
else
ipc.control(66701,0)
-- SetVar=ipc.readUD(66701)
-- ipc.display('etat avionics : '..SetVar,10)
end
-- Fuel Pump Bit 2 : 2^3 = 8
if logic.And(testVar,8) ~= 0 then
ipc.control(66237,1)
-- SetVar=ipc.readUD(66237)
-- ipc.display('etat Fuel Pump : '..SetVar,10)
else
ipc.control(66237,0)
-- SetVar=ipc.readUD(66237)
-- ipc.display('etat Fuel Pump : '..SetVar,10)
end
-- De-Ice Bit 2 : 2^4 = 16
if logic.And(testVar,16) ~= 0 then
ipc.control(66031,1)
-- SetVar=ipc.readUD(66031)
-- ipc.display('etat De-Ice : '..SetVar,10)
else
ipc.control(66031,0)
-- SetVar=ipc.readUD(66031)
-- ipc.display('etat De-Ice : '..SetVar,10)
end-- Pitot Heat Bit 2 : 2^5= 32
if logic.And(testVar,32) ~= 0 then
ipc.control(65858,1)
-- SetVar=ipc.readUD(65858)
-- ipc.display('etat Pitot Heat : '..SetVar,10)
else
ipc.control(65858,0)
-- SetVar=ipc.readUD(65858)
-- ipc.display('etat Pitot Heat : '..SetVar,10)
end
endevent.offset(0x66C0, 'UD', 'HID_Siwtch_Panel')
EDIT : De plus, dans la console Linda (vraiment très pratique, un Must Have), j'ai d'incessants contrôles qui tournent en boucle. Je suppose que j'ai donc dans un des LUA quelque chose qui met un peu le souc ...
Edit 2 : Dans aucun de mes LUA je cherche à adresser ces contrôles ...
Il s'agit de PANEL_ID_OPEN et PANEL_ID_CLOSE :
Dernière modification par Oliver77 (10-11-2014 13:55:16)
Hors ligne
@ Philippe :
Juste une petit question, quelqu'un a une idée pour allumer les loupiotes du train d'atterrissage sur le module Saitek ?
Je savais bien que j'avais vu un post à ce sujet ! Voici le lien. En espérant que cela pourra t'aider...
Hors ligne
Message Effacé
Dernière modification par dreambox62 (12-05-2015 09:29:40)
Hors ligne