Gérer affichage 7 segments Air Manager

remi

PILOTE PRIVE
Messages
158
Réactions
47
Bonjour,

Petite question, quelqu'un utiliserait il airmanager et une arduino avec Xplane ?
Est il bien possible de gérer des afficheurs 7 segments ?
La partie programmation est elle du lua ou c'est un peu plus simple ?

Si vous avez un exemple de programmation pur un switch par exemple, ca m'interesse avant d'acheter.

merci
 
Salut @remi !

Regarde ici :


et cette video (sur le même post) :

 
Oui, il faut flasher l’Arduino au préalable via Air Manager, et ensuite toute la programmation est simple, via des instructions dans le code Lua.
Rien n’est à faire côté Arduino.

un exemple de code pour un switch MASTER BATTERY qui fonctionne aussi bien sur XPlane que FSX/P3D. Tu codes un switch physique et son action dans le simu en moins de 10 lignes de Lua

Lua:
-- This function is called every time the battery switch has a new position
function switch_battery_callback(position)
  if position == 0 then
    fsx_event("BATTERY_BUS_CONTACT_SET", 0)
    xpl_command("sim/electrical/battery_1_off")
  elseif position == 1 then
    fsx_event("BATTERY_BUS_CONTACT_SET", 1)
    xpl_command("sim/electrical/battery_1_on")
  end
end

-- Here we create the switch. In case of a two-way switch use 2, in case of a one-way switch use 1. In this example we use 2 (two-way).
hw_switch_add("Battery", 2, switch_battery_callback)
Tout est dans le wiki avec des exemples de code.

Pas mal de matériel est dejà supporté en natif, pour les 7 segments de mémoire il faut des afficheurs MAX7219 et HD44780

Pour du matériel plus exotique non supporté, tu peux toujours utiliser Message_port, mais dans ce cas il te faudra créer le code Arduino toi même, c’est plus complexe.
Ce permet de gérer des afficheurs OLEDs type SSD1306 par exemple.
CF2F173E-A7BE-4BD7-A296-5FFD84E43378.jpeg


Le forum de Sim Innovation est une bonne source d’aide, sinon poses tes questions ici on t’aidera.

Jacques
 
Dernière édition:
J'ai investi et je ne regrette pas meme si je n'utilise que la partie arduino de AM.
Je cherchais le push/pull du FCU et avec datareftool, ca a été immédiatement et ca fonctionne bien.
Maintenant, je regarde pour la partie affichage 7 segments, je vais me plonger dans le wiki pour le formatage de l'affichage et je reviendrai si je coince !

merci à vous

Remi
 
Bon, je commence la valse des questions !
Tout d'abord, je suis sur 319 de Toliss.
L'idée est, par exemple, d'afficher la valeur du heading du FCU sur un max7219.

L'affichage de la valeur seule ne pose pas de probleme.

Ensuite je veux tenter d'avoir les --- lorsque le mode est manager ou la valeur du heading en mode selecter.
Je me dis que des if doivent suffire donc j'écris ca :
Lua:
display_chr_HDG1 = hw_chr_display_add("affichage vitesse", "MAX7219", 1)

local hdgmanager = "AirbusFBW/HDGdashed"                        -- verifie sir le mode est manager (1) ou selecter (0)

function CAP(HDG1)

   if hdgmanager == 0 then                                     -- si on est en mode selecter
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, string.format("%03.0f", HDG1  ) )   
              
   else      -- si on est en mode manager
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, "---") -- affichage des ---
              
   end
   
end
xpl_dataref_subscribe("sim/cockpit/autopilot/heading_mag", "FLOAT", CAP)

Dans ce cas, j'ai immediatement l'affichage des --- quoique je fasse.
J'ai tenté avec du elseif, la ca n'affiche plus rien.

Il y a probablement un truc de logique que je n'ai pas pigé et que vous allez voir de suite.

Je ne regrette pas l'achat par contre, ca me permet d'avoir plus de liberté que simvim et cela ouvre de nouvelles possibilités.
Merci
 
Oui Air Manager est beaucoup plus puissant à terme que Mobiflight ou Simvim car même si la courbe d’apprentissage est plus raide et il faut mettre les mains dans le cambouis, tu as vu les possibilités immenses du soft, à la manière de SIOC, les capacités graphiques en plus. Le soft est également en constante évolution, et les capacités d’accès aux datas de navigation commencent à arriver, sans parler de la compatibilité multi plateformes, multi OS qui est tout bonnement unique (je connais aucune solution équivalente sous Mac par exemple)

Et en prime tu vas améliorer ton anglais car je te conseille fortement de t’inscrire sur le forum de SimInnovation où tu auras de nombreux conseils, et où Corjan et Ralph les deux développeurs d’AM sont présents.

Je propose également que tu crées un Topic spécifique à ton problème, cela évitera qu’il soit noyé au fin fond d’un thread générique.

Et du coup peut être renommer ce thread autrement que Air Manager qui est trop vague, quitte à créer un sous catégorie spécifique à Air Manager développement.
Windy tu peux faire ça pour lui?
Merci

Dès que ce sera fait, je pourrai te répondre car j’ai déjà la solution à ton problème, qui je pense n’est pas lié aux if/else! (Si ça c’est pas du teasing):cool:

Jacques
 
Dernière édition:
Salut
le if then else n’a rien d’anormal, par contre la variable testée si!
Le problème est ici:
Lua:
local hdgmanager = "AirbusFBW/HDGdashed"
Tu déclares la variable Lua hdgmanager et tu lui affectes une chaîne de caractères de texte.
Et cette variable n’est plus modifiée par la suite dans ton code.

Moralité ta variable hdgmanager dans ton test n’a JAMAIS la valeur 0 attendue et donc branche direct sur le else et affiche en permanence — .
Il ne faut pas confondre dataref et variable Lua, ce n’est pas en faisant comme cela qu’il faut s’y prendre.

Le seul moyen d’accéder en lecture à un dataref c’est d’utiliser un xpl_dataref_subscribe() comme tu as fait pour la valeur de cap.

Le plugin Air Manager ausculte en permanence les Datarefs déclarés et dès que ceux-ci changent, il transmet la valeur modifiée à AM qui a son tour appelle la fonction concernée. Un dataref (ou variable pour FSX)subscribe() est toujours associé à une fonction qui va traiter la valeur reçue(*).

Il faut donc créer un nouveau dataref subscribe et sa fonction associée pour gérer
ta variable qui sera utilisée par
ailleurs.


Lua:
display_chr_HDG1 = hw_chr_display_add("affichage vitesse", "MAX7219", 1)

local hdgmanager=0.0 -- déclaration initiale de la variable lua (un float )

-- ici la variable Lua hdgmanager est mise à jour suivant l’évolution du dataref
function hdg_mode(hdgmode)
     hdgmanager = hdgmode
end

xpl_dataref_subscribe("AirbusFBW/HDGdashed", "FLOAT",hdg_mode)


-- verifie sile mode est manager (1) ou selecter (0)

function CAP(HDG1)

   if hdgmanager == 0.0 then                                     -- si on est en mode selecter
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, string.format("%03.0f", HDG1  ) )

   else      -- si on est en mode manager
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, "---") -- affichage des ---

   end

end
xpl_dataref_subscribe("sim/cockpit/autopilot/heading_mag", "FLOAT", CAP)

Encore mieux, comme l’évolution des deux Datarefs est liée et qu’ils sont utilisés en même temps, l’idéal est de regrouper tout ça en un seul xpl_dataref_subscribe() qui peut surveiller plusieurs variables en même temps (pas de limites connues).
Du coup plus besoin de variable Lua intermédiaire.

Lua:
display_chr_HDG1 = hw_chr_display_add("affichage vitesse", "MAX7219", 1)

-- verifie sile mode est manager (1) ou selecter (0)

function affiche_cap(HDG1,hdgmode) -- La fonction récupère les valeurs des deux Datarefs dans l’ordre de leur déclaration dans le subscribe

   if hdgmode== 0.0 then                                     -- si on est en mode selecter
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, string.format("%03.0f", HDG1  ) )

   else      -- si on est en mode manager
             hw_chr_display_set_text(display_chr_HDG1, 0, 0, "---") -- affichage des ---

   end

end

xpl_dataref_subscribe("sim/cockpit/autopilot/heading_mag", "FLOAT",
"AirbusFBW/HDGdashed", "FLOAT",
affiche_cap)

Et voilà, une fois que tu as compris le principe, tu peux ajouter d’autres Datarefs qui peuvent être utiles dans ce cas, par exemple le fait que le FCU soit alimenté ou pas, ce qui permettra de ne rien afficher en cold en dark…
Bien évidemment il vaut mieux limiter les Datarefs suivis dans un seul subscribe seulement à ceux qui sont pertinents, pour éviter d’avoir des centaines de tests inutiles qui peuvent éventuellement ralentir le code Lua.

A noter qu’on peut tout à fait avoir le même dataref dans plusieurs subscribe() différents, ça ne pose aucun problème.

Dernier conseil, pour progresser, rien ne vaut l’analyse du code Lua d’instruments déjà existants.

Jacques

(*): La fonction appelée par un subscribe() doit toujours être déclarée dans le code AVANT le subscribe() en lui même, sinon le compilateur Lua renvoie une erreur.
 
Dernière édition:
Merci @JackZ, je me suis empressé de tester après ce teaser et ho désespoir ca ne marche pas ;-)

Ca a remarché lorsque j'ai déclaré AirbusFBW/HDGdashed en INT, il ne prends la valeur que de 0 ou 1. En FLOAT ca ne lui plaisait.

Je comprends mieux la philosophie de s'abonner à des variables et de les écouter en permanence.
Je vais bosser la dessus et faire attention a la façon dont les choses sont déclarées.

J'utilise beaucoup les exemples dans le wiki qui est vraiment complet.

Apres quelques tâtonnements, ca rentre doucement et je m'extasie bêtement devant ma led qui s'allume, mon affichage qui change de kts en mach ;-)

Grand merci à vous deux.

Remi
 
Dernière édition:
Merci @JackZ, je me suis empressé de tester après ce teaser et ho désespoir ca ne marche pas ;-)

Ca a remarché lorsque j'ai déclaré AirbusFBW/HDGdashed en INT, il ne prends la valeur que de 0 ou 1. En FLOAT ca ne lui plaisait.

Je comprends mieux la philosophie de s'abonner à des variables et de les écouter en permanence.
Je vais bosser la dessus et faire attention a la façon dont les choses sont déclarées.

J'utilise beaucoup les exemples dans le wiki qui est vraiment complet.

Apres quelques tâtonnements, ca rentre doucement et je m'extasie bêtement devant ma led qui s'allume, mon affichage qui change de kts en mach ;-)

Grand merci à vous deux.

Remi
Ah oui effectivement, le type de Dataref est important et ne connaissant pas les Datarefs du Toliss (je développe des instruments pour FFA320) je n’avais aucun moyen de le savoir, mais tu l’as trouvé tout seul bravo!
J’imagine que du coup tu as remplacé le

Lua:
if hdgmode== 0.0 then
par
Lua:
if hdgmode== 0 then
puisque l’élément à tester est un INT (entier)

Je pense que tu as compris en gros le principe, c’est effectivement toujours jouissif de faire fonctionner du hardware à partir de quelques lignes de code et Air Manager comme SIOC permet d’implémenter des fonctionnalités avancées relativement simplement, alors que les solutions type Simvim ou Mobiflight sont limitées à ce qui a été prévu d’origine par les concepteurs.

Je ne sais pas si tu aurais pu obtenir ce résultat avec Simvim par exemple.

Sii tu as d’autres questions n’hésites pas, et le forum de Sim innovations est très utile aussi, en plus d’étudier le code d’instruments existant.

Jacques
 
Dernière édition:
J’imagine que du coup tu as remplacé le
Lua:
if hdgmode== 0.0 then
par
Lua:
if hdgmode== 0 then
puisque l’élément à tester est un INT (entier)

Oui ca c'est fait, je fais attention maintenant !

Je pense que tu as compris en gros le principe, c’est effectivement toujours jouissif de faire fonctionner du hardware à partir de quelques lignes de code et Air Manager comme SIOC permet d’implémenter des fonctionnalités avancées relativement simplement, alors que les solutions type Simvim ou Mobiflight sont limitées à ce qui a été prévu d’origine par les concepteurs.

Je ne sais pas si tu aurais pu obtenir ce résultat avec Simvim par exemple.

Simvim est très bien, simple a partir du moment ou l'avion que l'on souhaite reproduire est pris en charge par Vlad, un des auteurs.
Par exemple pour le Da62 ou le Zibo, cela fonctionne parfaitement, il n'y a que des clics a faire sur le configurateur pour attribuer une fonction à une broche de l'arduino.
Par contre, si l'avion n'est pas reproduit dans Simvim, ce qui est le cas des airbus 319/320/321, on se retrouve bloqué puisque l'on ne peut pas intégrer de dataref ou command soit même. Il faut que Vlad le fasse et l'intègre au plugin. Lorsqu'on lui demande pour les airbus , il dit oui, ca sera fait mais sans date. D'où l'idée de passer à un plugin qui permet de gérer soit même les choses.

Sii tu as d’autres questions n’hésites pas, et le forum de Sim innovations est très utile aussi, en plus d’étudier le code d’instruments existant.

Jacques

Merci, j'avance tranquillement, mon affichage de la vitesse fonctionne maintenant, en kts, mach et manager.

remi
 
Me revoila, l'affichage du FCU fonctionne maintenant correctement, sauf le + du VS, suis je bête sur un 7 segments, pas moyen de faire un + !

Ce qui m'amène a mon nouveau probleme, sur le baro du Toliss, qui affiche Std lorsqu'il est en standard.
Le "S" peut se faire avec un 5, le "d" existe, mais pour le "t" rien du tout sur un 7 segments qui n'affiche que jusqu'à f.
Tout cela avec un max7219.

Il semble possible sous l'ide arduino de programmer chaque segment indépendamment avec WRITE.
Mais ne je trouve rien d'équivalent sous AM ?
Faudrait il utiliser un "8 segments" qui semble avoir plus de possibilité ?



Remi
 
Dernière édition:
Il suffit juste d’écrire «Std » et normalement ça devrait marcher, avec la dernière version 4.x
 
Il suffit juste d’écrire «Std » et normalement ça devrait marcher, avec la dernière version 4.x
Justement non, c'est ce que j'ai tenté au début mais avec ma version 4.02, le t ne s'affiche pas.
Quand je cherche sur le max7219, je ne trouve en possibilité que 0 à 9 et A à F.
 
Ah, comme je n’ai pas de MAX7219, je n’ai jamais testé.
Je sais néanmoins que le problème d’affichage des caractères avec des afficheurs 7 segments a été abordé il y a quelques mois sur le forum SI, j’ai même contribué un peu au développement de la solution, et je pensais qu’elle avait été implémentée.
Normalement les lettres G,I,J,M,O,S,U,Y,Z,r,q,t,u et z ont été rajoutées à celles déjà existantes.

Peut être sur la dernière version bêta?
Sinon je vais relancer Corjan le développeur.
 
Dernière édition:
Merci Jack, je vais regarder ça.
Mais en même temps simvim vient de mettre à jour son plugin en intégrant enfin le toliss a321, à tester !

Remi
 
Retour
Haut