Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Programmation LUA, Macros FSUIPC, logiciel LINDA
et codage en LUA des gauges Air Manager

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede Papagolf » Mer 21 Fév 2018 18:52

Bonsoir a Tous

Bravo pour moi ça marche impeccable
un grand merci affiche merci affiche à ceux qui se sont décarcassés pour cette jauge (et les autres aussi lolaffiche )
j'ai plus qu'a essayer de comprendre comment y affecter un bouton externe avec FSUIPC.

Bonne soirée à tous et bon GROG jacques
Bruno
Papagolf
 
Messages: 105
Inscription: 29/11/15
Localisation: 13

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede arcc » Mer 21 Fév 2018 20:06

Il n'y a pas besoin de souscrire à la position du sélecteur de carburant, puisque cet afficheur ne gère pas les sélecteurs de carburant. La jauge affiche simplement la valeur choisie suivant la position du bouton sélectionné.


Je viens de lire tes messages et, curieusement, cet après midi, sur la route du boulot, j'étais arrivé à la même conclusion.
Je me prenais "le chou" hier soir à essayer de lier la position du bouton avec l'affichage (pour le mouvement avec la souris). Evidement il ne servait à rien de vouloir lier l'affichage de la jauge à la variable "position du sélecteur".
J'y serais sans doute arrivé, mais en combien de temps. gratgrat
En tout cas cette jauge va superbement bien rendre, même si comme toi, je n'ai pas cet avion, et je vais la gardé précieusement comme exemple pour de futur programmation.

Jacquesvde tu n'as plus qu'a revoir l'ombrage des boutons selon la position.

A+
Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 715
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede JacquesZ » Mer 21 Fév 2018 20:49

Papagolf a écrit:Bonsoir a Tous

Bravo pour moi ça marche impeccable
un grand merci affiche merci affiche à ceux qui se sont décarcassés pour cette jauge (et les autres aussi lolaffiche )
j'ai plus qu'a essayer de comprendre comment y affecter un bouton externe avec FSUIPC.

Bonne soirée à tous et bon GROG jacques
Bruno


Ben là via FSUIPC, ça va être assez compliqué.

Je vois les choses comme ça:
1-Affecter une macro Lua (à créer) au bouton externe (attention, comme il ya quatre positions, je dirais plutôt quatre boutons virtuels, connectés sur le même contacteur 12 positions bricolé pour ne comporter que 4 positions à 90 degrés (*)).
La (les) macros, suivant la position du dit bouton va(vont) remplir une Lvar "libre" de FSUIPC avec une valeur de 0 à 3 en utilisant une fonction du genre write_Lvar. Pour créer cette macro sous FSUIPC, je suis pas franchement spécialiste, d'autres t'expliqueront ça mieux que moi...
2-soucrire et lire cette Lvar dans AM, et agir en fonction de la valeur de cette Lvar.

Autre solution:
Utiliser AM version 3.x et ajouter un bouton hardware (en fait quatre) piloté via une Arduino Uno à 8 Euros avec quatre /cinq lignes de code directement dans la jauge en question. Comme il reste des broches, tu peux utiliser l'Arduino pour des fonctions additionnelles si nécessaire.

Pour créer un contacteur 4 positions aussi particulier, je me demande si le plus simple n'est pas de faire un système avec des micro-switches périphériques en partie arrière du panel et actionnés un par un par un axe et un doigt.

Content que la jauge fonctionne, beau travail d'équipe, bravo!
Christian, je n'ai pas voulu te piquer l'idée, mais après avoir téléchargé ta jauge par curiosité, je me suis aperçu qu'il y avait un soucis avec le principe du contacteur qui selon moi n'était pas lié à la sélection réservoir, alors j'ai voulu essayer à mon tour et de fil en aiguille...
La prog est très sale et pas documentée, désolé, je pense qu'il y a des doublons dans les variables, on devrait pouvoir optimiser un poil le code, mais là j'ai pas trop le temps.

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede jacquesvde » Mer 21 Fév 2018 22:18

Bonjour,

Merci JacquesZ et Christian sans vous je serait encore a me poser la question par ou commencer la programmation, vous avez fait un travail superbe. applaublanc

Je vais regarder pour la finalisation et mettre au propre le script de la jauge, je suis encore faible avec les antibiotiques, il me reste encore 8 jours de traitement, il faut juste que vous preniez un peut de patience.

En reparlant de la jauge si JacquesZ ne m'aurais pas tirer vers le haut elle n’existerait pas, sur le plan pédagogique c'est un beau exemple de script qui pourrait servir avec d'autre avion.

Pour finir c'est une belle réalisation d'équipe bravo mes amis. applaublanc

Jacques cligneoeil
Avatar de l’utilisateur
jacquesvde
 
Messages: 1226
Inscription: 20/04/09
Localisation: Courcelles Belgique

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede JacquesZ » Mer 21 Fév 2018 22:50

Bon. comme j'avais un peu honte de fournir un code aussi dégueu, et comme tu es encore faible Jacques cligneoeil voici le code "nettoyé" et commenté vite fait (je sais, je devrais être en train de faire autre chose, mais AM est une vraie came... lunettesnoires )-

On peut changer la position de départ du bouton en changeant la variable dans le code.
Tu n'as plus qu'à créer quatres images du bouton avec les ombres dans le bon sens, et ce sera parfait.
J'aime beaucoup l'encadrement "vieilli" de la jauge avec les traces d'usure!

Code: Tout sélectionner
-------------------------------------------------------------------------
-- Multi tanks quantity vintage display gauge for the C47 (DC3)
-- FSX/P3D version only
-- J. Vandenheede 02/2018
-------------------------------------------------------------------------
-- Customization variables
-------------------------------------------------------------------------
-- Set the maximum fuel quantity (full) in gallons here:
local gbl_max_fuel    = 200
-- position of the knob at startup of the gauge(0 to 3 , counting clockwise)
local knob_position = 0 --0: left main, 1: right main, 2: right aux, 3: left aux
-------------------------------------------------------------------------
-- end of customization variables - do not modify code beyond this point!
-------------------------------------------------------------------------
-- Global variables used for smooth movement of the needle --
local gbl_target_fuel = 0 -- target position of the needle
local gbl_cur_fuel    = 0 -- current position of the needle
local gbl_factor      = 0.06 -- acceleration factor
-- misc vars
Fuel_Quantity=0
master_batt_on=false
Fuel_qty={} -- array used to store the 4 tanks quantities

--Images--
img_add_fullscreen("Reservoir_ DC3.png")
img_needle_L = img_add("aiguille_Reservoir_ DC3.png", 28, 226, nil, nil)
img_add_fullscreen("Cache_fuel DC3.png")
-- 4 images are created for each one of the knob's position to properly display the shadows
mask_Bouton19=img_add("Bouton_Reservoir_LeftMain.png", 130, 513, nil, nil)
mask_Bouton20=img_add("Bouton_Reservoir_RightMain.png", 130, 513, nil, nil)
mask_Bouton4=img_add("Bouton_Reservoir_LeftAux.png", 130, 513, nil, nil)
mask_Bouton5=img_add("Bouton_Reservoir_RightAux.png", 130, 513, nil, nil)

----------------------------------------------
-- each tank quantity is stored in a temp variable array, with index varying with to the knob's position (0 to 3)
function  Fuel_Tank_Quantity(Quantity_L_Main ,Quantity_R_Main ,Quantity_L_Aux ,Quantity_R_Aux)

      Fuel_qty[0]=Quantity_L_Main
      Fuel_qty[1]=Quantity_R_Main
      Fuel_qty[2]=Quantity_R_Aux
      Fuel_qty[3]=Quantity_L_Aux   

end   

-- smooth needle movement routine
function timer_callback()   
   
    -- Rotate needle image
    img_rotate(img_needle_L, 120 / 200 *(gbl_cur_fuel))   
   
    -- Calculate the current fuel needle position
    gbl_cur_fuel = gbl_cur_fuel + ((gbl_target_fuel - gbl_cur_fuel) * gbl_factor)

end
-------------------------

-- it's an electrical gauge: displays zero when Master Batt is off
function batt_state(batt)
master_batt_on=batt
if master_batt_on==false then
      gbl_target_fuel=0
   else
      gbl_target_fuel=Fuel_qty[knob_position]
   end
end

--Fuel_Quantity to display is retrieved from the current knob position,
-- and the proper knob image is displayed accordingly
function knob(direction)
   sound_play(knobclick)
   knob_position = knob_position + direction -- direction is either +1/-1
   if knob_position <0 then knob_position=3 end
   if knob_position >3 then knob_position=0 end
   --print (knob_position)
    img_visible(mask_Bouton19, false)-- left main:  pos 0
   img_visible(mask_Bouton20, false)--right main : pos 1
   img_visible(mask_Bouton5, false)-- right aux: pos 2   
   img_visible(mask_Bouton4, false)-- left aux: pos 3
    if knob_position == 0 then
      Fuel_Quantity = Fuel_qty[0]--Fuel_Quantity_L_Main
      img_visible(mask_Bouton19, true)
    elseif knob_position == 1 then
      Fuel_Quantity = Fuel_qty[1]--Fuel_Quantity_R_Main   
        img_visible(mask_Bouton20, true)
    elseif knob_position == 2 then
      Fuel_Quantity = Fuel_qty[2]--Fuel_Quantity_R_Aux
      img_visible(mask_Bouton5, true)   
   elseif knob_position == 3 then
      Fuel_Quantity = Fuel_qty[3]--Fuel_Quantity_L_Aux   
      img_visible(mask_Bouton4, true)   
    end
   if master_batt_on==false then
   gbl_target_fuel=0
   else
   gbl_target_fuel = var_cap(Fuel_Quantity , 0, gbl_max_fuel)
   end
end

-- function knob is called once at startup with no movement (0), to set the knob position and display it
knob(0)

-- Knob creation
dial_knob = dial_add (nil,50,420,300,300,knob) --  a rotating knob is created without any image (nil) for mouse operation
--dial_click_rotate(dial_knob, 90) -- disregard, unused

---------------------------------------------------------------------   
-- subscribes
fsx_variable_subscribe(
                  "FUEL TANK LEFT MAIN QUANTITY", "Gallons",
                  "FUEL TANK RIGHT MAIN QUANTITY", "Gallons",                  
                  "FUEL TANK LEFT AUX QUANTITY", "Gallons",                  
                  "FUEL TANK RIGHT AUX QUANTITY", "Gallons", Fuel_Tank_Quantity)   
                  
fsx_variable_subscribe("ELECTRICAL MASTER BATTERY","Boolean",batt_state)

-- Timer used for smooth needle movement --
tmr_update = timer_start(0, 50, timer_callback)


Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede jacquesvde » Mer 21 Fév 2018 23:13

JacquesZ a écrit:Bon. comme j'avais un peu honte de fournir un code aussi dégueu, et comme tu es encore faible Jacques cligneoeil voici le code "nettoyé" et commenté vite fait (je sais, je devrais être en train de faire autre chose, mais AM est une vraie came... lunettesnoires )-

On peut changer la position de départ du bouton en changeant la variable dans le code.
Tu n'as plus qu'à créer quatres images du bouton avec les ombres dans le bon sens, et ce sera parfait.
J'aime beaucoup l'encadrement "vieilli" de la jauge avec les traces d'usure!

Code: Tout sélectionner
-------------------------------------------------------------------------
-- Multi tanks quantity vintage display gauge for the C47 (DC3)
-- FSX/P3D version only
-- J. Vandenheede 02/2018
-------------------------------------------------------------------------
-- Customization variables
-------------------------------------------------------------------------
-- Set the maximum fuel quantity (full) in gallons here:
local gbl_max_fuel    = 200
-- position of the knob at startup of the gauge(0 to 3 , counting clockwise)
local knob_position = 0 --0: left main, 1: right main, 2: right aux, 3: left aux
-------------------------------------------------------------------------
-- end of customization variables - do not modify code beyond this point!
-------------------------------------------------------------------------
-- Global variables used for smooth movement of the needle --
local gbl_target_fuel = 0 -- target position of the needle
local gbl_cur_fuel    = 0 -- current position of the needle
local gbl_factor      = 0.06 -- acceleration factor
-- misc vars
Fuel_Quantity=0
master_batt_on=false
Fuel_qty={} -- array used to store the 4 tanks quantities

--Images--
img_add_fullscreen("Reservoir_ DC3.png")
img_needle_L = img_add("aiguille_Reservoir_ DC3.png", 28, 226, nil, nil)
img_add_fullscreen("Cache_fuel DC3.png")
-- 4 images are created for each one of the knob's position to properly display the shadows
mask_Bouton19=img_add("Bouton_Reservoir_LeftMain.png", 130, 513, nil, nil)
mask_Bouton20=img_add("Bouton_Reservoir_RightMain.png", 130, 513, nil, nil)
mask_Bouton4=img_add("Bouton_Reservoir_LeftAux.png", 130, 513, nil, nil)
mask_Bouton5=img_add("Bouton_Reservoir_RightAux.png", 130, 513, nil, nil)

----------------------------------------------
-- each tank quantity is stored in a temp variable array, with index varying with to the knob's position (0 to 3)
function  Fuel_Tank_Quantity(Quantity_L_Main ,Quantity_R_Main ,Quantity_L_Aux ,Quantity_R_Aux)

      Fuel_qty[0]=Quantity_L_Main
      Fuel_qty[1]=Quantity_R_Main
      Fuel_qty[2]=Quantity_R_Aux
      Fuel_qty[3]=Quantity_L_Aux   

end   

-- smooth needle movement routine
function timer_callback()   
   
    -- Rotate needle image
    img_rotate(img_needle_L, 120 / 200 *(gbl_cur_fuel))   
   
    -- Calculate the current fuel needle position
    gbl_cur_fuel = gbl_cur_fuel + ((gbl_target_fuel - gbl_cur_fuel) * gbl_factor)

end
-------------------------

-- it's an electrical gauge: displays zero when Master Batt is off
function batt_state(batt)
master_batt_on=batt
if master_batt_on==false then
      gbl_target_fuel=0
   else
      gbl_target_fuel=Fuel_qty[knob_position]
   end
end

--Fuel_Quantity to display is retrieved from the current knob position,
-- and the proper knob image is displayed accordingly
function knob(direction)
   sound_play(knobclick)
   knob_position = knob_position + direction -- direction is either +1/-1
   if knob_position <0 then knob_position=3 end
   if knob_position >3 then knob_position=0 end
   --print (knob_position)
    img_visible(mask_Bouton19, false)-- left main:  pos 0
   img_visible(mask_Bouton20, false)--right main : pos 1
   img_visible(mask_Bouton5, false)-- right aux: pos 2   
   img_visible(mask_Bouton4, false)-- left aux: pos 3
    if knob_position == 0 then
      Fuel_Quantity = Fuel_qty[0]--Fuel_Quantity_L_Main
      img_visible(mask_Bouton19, true)
    elseif knob_position == 1 then
      Fuel_Quantity = Fuel_qty[1]--Fuel_Quantity_R_Main   
        img_visible(mask_Bouton20, true)
    elseif knob_position == 2 then
      Fuel_Quantity = Fuel_qty[2]--Fuel_Quantity_R_Aux
      img_visible(mask_Bouton5, true)   
   elseif knob_position == 3 then
      Fuel_Quantity = Fuel_qty[3]--Fuel_Quantity_L_Aux   
      img_visible(mask_Bouton4, true)   
    end
   if master_batt_on==false then
   gbl_target_fuel=0
   else
   gbl_target_fuel = var_cap(Fuel_Quantity , 0, gbl_max_fuel)
   end
end

-- function knob is called once at startup with no movement (0), to set the knob position and display it
knob(0)

-- Knob creation
dial_knob = dial_add (nil,50,420,300,300,knob) --  a rotating knob is created without any image (nil) for mouse operation
--dial_click_rotate(dial_knob, 90) -- disregard, unused

---------------------------------------------------------------------   
-- subscribes
fsx_variable_subscribe(
                  "FUEL TANK LEFT MAIN QUANTITY", "Gallons",
                  "FUEL TANK RIGHT MAIN QUANTITY", "Gallons",                  
                  "FUEL TANK LEFT AUX QUANTITY", "Gallons",                  
                  "FUEL TANK RIGHT AUX QUANTITY", "Gallons", Fuel_Tank_Quantity)   
                  
fsx_variable_subscribe("ELECTRICAL MASTER BATTERY","Boolean",batt_state)

-- Timer used for smooth needle movement --
tmr_update = timer_start(0, 50, timer_callback)


Jacques


merci affiche merci affiche merci affiche

Jacques cligneoeil
Avatar de l’utilisateur
jacquesvde
 
Messages: 1226
Inscription: 20/04/09
Localisation: Courcelles Belgique

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede jacquesvde » Mer 21 Fév 2018 23:34

Salut Jacques,
Ça fonctionne supère bien avec l’outil d'essais jauge AM,
Demain si tout va bien pour moi, je fait un essais sur le DC 47 P3D.

Merci,
Jacques cligneoeil
Avatar de l’utilisateur
jacquesvde
 
Messages: 1226
Inscription: 20/04/09
Localisation: Courcelles Belgique

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede JacquesZ » Jeu 22 Fév 2018 00:25

Ok super, tiens moi au courant.
Pour publier la jauge définitive, je te suggère d’enlever du dossier ressources les éléments graphiques inutiles (Hold_...), car la jauge fait plus d’1,5 Mo.

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede PapaLima » Ven 23 Fév 2018 01:00

Bravo à vous tous bravoaffiche

On va vous appeler "la dream team AM" ecroulerire
Avatar de l’utilisateur
PapaLima
 
Messages: 814
Inscription: 14/04/16
Localisation: LFPG

Re: Gauges pour le Douglas C-47 (DC-3) AM 2.1.3 FSX P3D

Messagede JacquesZ » Ven 23 Fév 2018 01:14

C’est sûr à plusieurs, on fait des choses sympas.
JacquesV fait de très belles jauges photorealistes.
Reste encore quelques jauges pour faire un panel complet.

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

PrécédenteSuivante

Retourner vers LUA, Linda, Macros & gauges Air Manager





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités