Page 5 sur 7

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 14:42
de JacquesZ
[Edit: désolé mon message a été tronqué, ça m'apprendra à répondre sur le forum à partir d'un Iphone avec plus de batterie tapebaton cette version est éditée et devrait être plus compréhensible]

Christian

Pour la deuxième jauge, tu appelles deux fois des fonctions identiques, une fois via le timer, une fois via le fsx-subscribe. Ça doit rendre l'aiguille schyzophrène à mon avis... lunettesnoires
Pour un déplacement doux via un timer, il faut définir deux variables GLOBALES (définies indépendamment d'une fonction) une de position "départ" (valeur actuelle de l'aiguille) et une de position "cible" ( valeur à atteindre) qui est la valeur donnée par Simconnect.
La routine appelée par le fsx_variable_subscribe se contente après les calculs nécessaires éventuels de définir la valeur cible.
La deuxième routine appelée toutes les 50 msec via le timer qui est lancé au démarrage de la jauge, va elle gérer le déplacement doux de l'aiguille. Son objet est de faire tourner l'aiguille depuis sa position actuelle (départ) vers une position intermédiaire, qui est définie par la formule:
position de départ+((position cible - position de départ)/ nombre de pas).
Plus le nombre de pas est grand, plus l'aiguille mettra du temps à rejoindre la position/valeur cible.
Une fois l'aiguille en position intermédiaire, on met à jour la variable de position initiale, qui devient égale à la position intermédiaire, et on est prêts pour un nouvel appel à la routine 50 msec plus tard.

Tu peux t'inspirer du code du HSI que j'ai mis sur le store d'Air Manager, cette portion de déplacement doux d'aiguille est documentée (en anglais).

Sinon, en regardant rapidement ton code pour la dernière jauge T5, il y a quelque chose que je ne comprends pas:
Tu prends les intervalles de section conditionnelle en valeurs décroissantes, et pourtant tu incrémentes l'angle de rotation. C'est la Lvar qui est comme ça? Plus T5temp1 est faible, plus l'aiguille tourne dans le sens des aiguilles d'une montre?
C'est bizarre.

Jacques

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 16:46
de arcc
De retour

Je vais essayer de modifier mes gauges. Le doublon des aiguilles, c'est moi qui est mal copier/coller.

Qu'est ce qu tu entend par "le store d'Air Manager" ?
C'est l'onglet Online ?

A+
Christian

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 17:38
de JacquesZ
arcc a écrit:Qu'est ce qu tu entend par "le store d'Air Manager" ?
C'est l'onglet Online ?

Oui c'est bien ça, tu peux télécharger le BENDIX/KING KA525 HSI et aussi le RMI de SimInnovations pour voir les routines de déplacement doux de l'aiguille.

En gros, on crée en dehors de toute fonction deux variables globales correspondant aux valeurs "cible" et "courante". Je les nomme par convention avec le suffixe gbl_, mais c'est pas obligatoire.
Code: Tout sélectionner
gbl_cur_heading=0 -- variable globale de la position actuelle (current)
gbl_target_heading=0-- variable globale "cible" (target)
gbl_factor=0.3 -- facteur de pas de variation de l'aiguille pour le déplacement doux (essayer plusieurs valeurs, plus elle est importante, plus le déplacement est rapide)


ensuite, on crée une fonction (appelée par le fsx_variable subscribe), dans laquelle on va définir la valeur variable cible à chaque changement des valeurs FSX surveillées par SimConnect (ici pour l'exemple le cap (heading) )
Code: Tout sélectionner
function appelée(heading)
....
gbl_target_heading=-heading-- dans ton cas ce devrait être la valeur de T5temp désirée (target)

...
end


et pour terminer on crée enfin la fonction de déplacement doux de l'aiguille, appelée par le timer toutes les 50 millisecondes
Code: Tout sélectionner
-- function to slowly move the needle  --
 function timer_callback()
    -- on tourne l'aiguille vers la valeur courante
   img_rotate(img_needle, gbl_cur_heading)
   -- calculation for rotating needle
-- ici on calcule l'écart (diff) "brut" entre valeur cible et valeur de départ.
-- suivant le sens, cette valeur peut être positive ou négative
       raw_diff = (360 + gbl_target_heading - gbl_cur_heading) %360
--  en fonction de cette écart, on va ensuite tourner du côté le plus proche pour rejoindre la valeur cible,
-- donc on choisit l'écart le plus petit  des deux possibilités pour rejoindre la valeur cible
       diff = fif(raw_diff < 180, raw_diff, (360 - raw_diff) * -1)
-- enfin on calcule la nouvelle valeur courante intermédiaire (gbl_cur_heading)
-- à laquelle sera l'aiguille au prochain appel de la fonction,
--  valeur qui sera soit la valeur "cible" si on est à - de 0.001 d'écart,
-- soit la valeur courante + (l'écart*facteur de variation de l'aiguille)
gbl_cur_heading = fif(math.abs(diff) < 0.001, gbl_target_heading, gbl_cur_heading + (diff * gbl_factor) )
-- ce sera la prochaine position de l'aiguille au prochain appel de la fonction dans 50 msec.


Cette dernière fonction appelée toutes les 50msec par cette ligne:
Code: Tout sélectionner
tmr_update = timer_start(0, 50,timer_callback)-- moves the CDI needle every 0.05 second   by calling the timer_callback() function

Attention, ce ne sont que des bouts de code incomplets, à toi de l'adapter selon ton usage.

Sinon, tu peux me faire passer tes jauges (par MP je sais pas si on peut)?
J'ai pas le Twin otter, mais je pourrais ainsi tester les jauges.

Jacques

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 17:44
de arcc
Bon voila ca fonctionne. J'ai un peu tâtonné, mais j'y suis arrivé grâce à qui... grâce à Jacques.
J'avais pas compris au debut qu'il fallait definier les variables. murrouge
Je met le script ici. Si ca peu servir.
Code: Tout sélectionner
-- Global variables --
local proprpm1    = 0
local target_proprpm1   = 0
local factor      = 0.05
local max_proprpm1    = 95

--Images--
img_add_fullscreen("proprpm_left_backdrop_day.png")
img_needle = img_add_fullscreen("needle.png")
img_smallneedle = img_add("smallneedle.png", 55,140,50,60)


function PT_nightlight(nightlight)

   if nightlight == false then
   img_visible(img_night,false)
   else
   img_visible(img_night,true)
   end   
   
end   

img_night = img_add_fullscreen("proprpm_left_backdrop_night.png")

--Functions--
function new_data(proprpm1)

      target_proprpm1 = var_cap(proprpm1, -2, max_proprpm1)

end

-- Slowly move needle to current amount of fuel --
function timer_callback()   
   
    -- Rotate needle image
    img_rotate(img_needle, ((271/100) * proprpm1) - 79)
   img_rotate(img_smallneedle, ((360/10) * proprpm1) - 0)

    -- Calculate the current rpm position
    proprpm1 = proprpm1 + ((target_proprpm1 - proprpm1) * factor)

end

-- Subscribe to data --
fsx_variable_subscribe( "LIGHT PANEL", "Bool", PT_nightlight)
fsx_variable_subscribe("L:DHC6_Np_1", "", new_data)

-- Timers --
tmr_update = timer_start(0, 50, timer_callback)


Bon je vais regarder l'autre gauge.

Encore merci

A+
Christian

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 18:46
de JacquesZ
"Ca me fait plaisir", comme dirait Jack (de l'autre côté de l'Atlantique) lunettesnoires

Re: Twin Otter "maison"

MessagePosté: Ven 15 Juil 2016 20:49
de jacquesvde
JacquesZ a écrit:"Ca me fait plaisir", comme dirait Jack (de l'autre côté de l'Atlantique) lunettesnoires


Je confirme bravo pour l'excellent travaille les gars 20/20affiche
sur ce je me sent tout petit a coter de vous, bon je dois étudiés de nouveau le LUA ecroulerire ecroulerire ecroulerire
Jacques cligneoeil

Re: Twin Otter "maison"

MessagePosté: Mer 20 Juil 2016 18:44
de arcc
Bonsoir

Sinon, en regardant rapidement ton code pour la dernière jauge T5, il y a quelque chose que je ne comprends pas:
Tu prends les intervalles de section conditionnelle en valeurs décroissantes, et pourtant tu incrémentes l'angle de rotation.


En fait, peut importe le sens, l'aiguille tourne quand même dans le bon sens.
J'ai essayé en mettant en valeurs croissante et j'avais le même problème de "saut" de l'aiguille.
J'ai résolu le problème. Les valeurs de la Lvars allaient trop vite, la gauge n'avait pas le temps de suivre. J'ai appliqué la même solution que pour l'autre Gauge, à savoir déplacer l'aiguille plus doucement. Avec un "factor" un peu plus important, l'aiguille suis bien la variable sans à-coup.
Voila une bonne chose de faite.

A+
Christian

Re: Twin Otter "maison"

MessagePosté: Jeu 11 Aoû 2016 07:31
de JacquesZ
Une petite mise à jour concernant les instruments pour le Twin Otter avec Air Manager.

Russ de Sim Innovation a réalisé le panneau quasi complet du Twin Otter y compris l'OverHead, et le Fire Panel, le tout interfacé avec des écrans tactiles. Les jauges communiquent entre elles pour les tests d'alarme par exemple.
Ça commence à être pas mal, dans l'optique d'un simu générique reconfigurable instantanément.
Il a fait une vidéo de démonstration ici:
https://siminnovations.com/forums/viewtopic.php?f=26&t=235&p=2055#p2055

Jacques

Re: Twin Otter "maison"

MessagePosté: Ven 12 Aoû 2016 18:04
de arcc
Merci Jacques pour l'info.

A+
Christian

Re: Twin Otter "maison"

MessagePosté: Jeu 25 Aoû 2016 17:46
de PapaLima
Merci Jacques pour le lien de la video. Les instruments AirManager pour le Twin sont vraiment bien fichus !!

Les écrans tactiles ouvrent une autre perspective qui est celle des cockpits génériques !! Plus d’immersion en étant pas "bloqué" sur un appareil c'est pas mal non plus.