Annonce

Réduire
Aucune annonce.

Cockpit maison avec Arduino (comment faire) ?

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #1
    Bonjour à tous,

    J'ai beaucoup progressé depuis ma dernière communication et j'en suis à monter une maquette sur un panneau de boîte carton ondulé en guise de tableau de bord. Pour le prix d'un seul Panel de Saitek, je me retrouve avec toutes les fonctions de tous les tableaux en un seul et placés selon mes préférences pour un cockpit générique, car j'utilise plusieurs types d'aéronefs, selon mon humeur et le temps don je dispose.

    J'ai déjà beaucoup peuplé mon tableau de bord (écrans LCD, boutons, interrupteurs, encodeurs et même un thermomètre pour la température de la carte Arduino Mega R3), même si je n'en suis qu'à 50 %, cela n'a jamais été aussi plaisant et efficace de piloter sous X-Plane !

    J'ai rencontré récemment un drôle de problème, mais tout de même un problème sérieux. Je programme sous Linux Kubuntu habituellement avec l'IDE d'Arduino 1.0.5, mais depuis que j'utilise la section DataRefs UDP « 104 XPNDR status » et « 118 autopilot values », j'ai plusieurs bogues d'affichages, les données de la grande majorité des autres DataRefs semblent ne plus être accessible (voir les deux images des deux écrans LCD et l'image de la section DataRefs UDP pour vous faire une idée).


    MaquetteTableauDeBord 1; Compilé avec 1.0.5+dfsg2 et 1.5.7beta Nightly; Boutons, encodeur et télécommande non fonctionnels :


    MaquetteTableauDeBord 2; Compilé avec 1.0.5 et 1.5.6-r2; Boutons, encodeur et télécommande fonctionnels :


    Configuration DataRefs UDP dans X-Plane 10.25 64 bits :


    Donc, il y aurait soit un problème de conflit entre les bibliothèques que j'utilise, soit X-Plane 10.25 64 bits à un gros bogue.

    Revenons sur les versions de l'IDE d'Arduino. Si je compile avec la version 1.0.5+dfsg2 (Deb Ubuntu) ou 1.5.7beta, l'affichage sur les deux écrans LCD est tel qu'il devrait être, mais je perds l'usage de la télécommande, des interrupteurs, des encodeurs avec bouton et probablement des autres boutons, mais je ne peux le vérifier, car rein ne répond, mais l'affichage est toujours misa à jour avec les données des DataRefs. Et la grande surprise, si je décoche la section DataRefs UDP « 104 XPNDR status » et « 118 autopilot values » tout refonctionne instantanément, mais évidemment, je perds l'accès aux DataRefs UDP « 104 » et « 118 ».

    Si je compile avec la version Arduino 1.0.5 ou 1.5.6-r2, , l'affichage sur les deux écrans LCD est perdu à 75 %, mais j'ai l'usage de la télécommande, des interrupteurs, des encodeurs avec bouton et des autres boutons, et l'affichage partiel est toujours misa à jour avec les données des DataRefs. Et l'autre grande surprise, si je décoche la section DataRefs UDP « 104 XPNDR status » et « 118 autopilot values », l'affichage complet refonctionne instantanément, mais évidemment, je perds l'accès aux DataRefs UDP « 104 » et « 118 ».

    J'ai fait des essais en utilisant les bibliothèques des versions avec les trois autres versions, mais sans résultat.

    Je me tourne donc vers vous !

    Avez-vous déjà eu ce genre de problème ?

    Avez-vous une piste de solution ?

    Merci d'avance à ceux qui se pencheront sur ce problème !

    L'ami René
    Tous pour un et un pour tous !
    Pour référence la dernière version de mon code source, toujours en développement et donc brouillonne « MegaRadiosPA_13.zip ».
    Fichiers attachés
    L'ami René
    Tous pour un et un pour tous !

    Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
    Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

    Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
    Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

    Commentaire


    • #1
      Bonjour René,

      Dans ton code Arduino, tu utilises des désignations de broches "A0", "A1" etc (comme les lignes suivantes).

      // Broche d'Arduino pour l'écran LCD 1.
      const byte LCD_1_RS = A0;
      const byte LCD_1_E = A1;
      const byte LCD_1_D4 = A2;
      const byte LCD_1_D5 = A3;
      const byte LCD_1_D6 = A4;
      const byte LCD_1_D7 = A5;

      // Créer et initialisation LCD en mode 4 bits.
      LiquidCrystalFast LCD_1 (LCD_1_RS, LCD_1_E, LCD_1_D4, LCD_1_D5, LCD_1_D6, LCD_1_D7);

      Je pensais que les numéros de broche devaient être purement numériques.
      À quelles broches physiques cela correspond-il?
      XP11.41 - WIN 7 - i7 - GTX970

      Commentaire


      • #1
        Bonjour FlyingBaldy,

        Je ne connais pas d'autre désignation des broches analogiques. Si vous regardez sur les cartes Arduino, il y a toujours d’estampillé sur le circuit imprimé la lettre « A » avec le numéro des broches analogiques.

        L'ami René
        Tous pour un et un pour tous !
        L'ami René
        Tous pour un et un pour tous !

        Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
        Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

        Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
        Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

        Commentaire


        • #1
          Teste les choses une par une, ne te perds pas dans un mélange de causes probables.
          1. Commence par décider quelle version arduino tu souhaite utiliser, et n'utilise plus que celle là.
          2. Vérifie que tu obtiens bien ce que tu veux dans les messages UDP que tu as choisi dans X-Plane. N'en sélectionne qu'un à la fois et vérifie qu'il y a les bonnes valeurs du côté arduino.
          3. Teste ensuite la télécommande, si ça ne marche pas trouve la cause et fais la marcher avant de passer au point suivant.
          4. Teste ensuite les interrupteurs, si ça ne marche pas trouve la cause et fais les marcher avant de passer au point suivant.
          5. Teste ensuite etc...


          Isole les différentes parties et fais les fonctionner une par une. Et si une fonctionne et qu'une modification pour une autre vient à la mettre en panne au moins tu sais qu'il y a une piste à explorer ici.

          PhM
          X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

          Commentaire


          • #1
            Bonjour PhM,

            Merci pour la méthode !

            C'est grosso modo la méthode que j'ai utilisée pour arriver aux conclusions que je décri, de petit pas en petit pas.

            Et pour le moment, je bloque sur les deux problèmes décrie, la variation du problème, selon l'IDE compilateur (version 1.0.5+dfsg2 (Deb Ubuntu) ou 1.5.7beta ou 1.0.5 ou 1.5.6-r2), que je ne peux explique, car trop complexe pour moi, sans une documentation complète en français, pour suivre tous les changements entre toutes les versions et les bibliothèques d'Arduino.

            Et pour la perte des DataRefs en activant l'une ou l'autre ou les deux sections UDP « 104 XPNDR status » et « 118 autopilot values », je ne peux explique, car aussi trop complexe pour moi, sans une documentation complète en français.

            Et je ne voie pas comment régler c'est problème et c'est pour cela que je me tourne vers vous.

            Pour ma préférence de l'IDE et compilateur de l'Arduino, c'est la version 1.0.5+dfsg2 (Deb Ubuntu), déjà incorporée aux dépôts standard de Kubuntu 12.04, mais je reste ouvert aux autres versions si cela règle les problèmes.

            L'ami René
            Tous pour un et un pour tous !
            L'ami René
            Tous pour un et un pour tous !

            Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
            Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

            Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
            Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

            Commentaire


            • #1
              Envoyé par Lami Voir le message
              Je ne connais pas d'autre désignation des broches analogiques. Si vous regardez sur les cartes Arduino, il y a toujours d’estampillé sur le circuit imprimé la lettre « A » avec le numéro des broches analogiques.
              C'est bien ce que je craignais.
              Il y a confusion entre les broches digitales et les analogiques.
              Une broche digitale peut être utilisée en entrée ou en sortie. Le signal est un "1" (si la tension est proche de 5V sur un Arduino Mega) ou un "0" (si la tension est proche de 0V).
              Une broche analogique (sur un Arduino Mega) ne peut être utilisée qu'en entrée. Le signal est une tension comprise entre 0 et 5V, qui est traduite par l'ARDUINO en une valeur entière de 0 à 1023 (au moyen d'un ADC ou Analog Digital Converter ou convertisseur analogique digital/numérique).

              Les broches des entrées digitales (0 à 53 sur un Arduino Mega) sont adressées au moyen de nombres, par exemple :
              * pinMode (38, INPUT) va placer la broche 38 de l'ARDUINO en entrée (lecture d'un signal extérieur)
              * digitalRead (24) va lire la valeur (0 ou 1) présente sur la broche 24.
              Pour une entrée analogique, les adresses sont également purement numériques (pas de "A" dans l'adresse), par exemple:
              * analogRead (3) va lire la tension (de 0V à 5V soit une valeur de 0 à 1023) présente sur la broche marquée A3.

              C'est l'instruction utilisée dans le code Arduino qui détermine si on utilise une broche digitale (0 à 53) ou analogique (A0 à A15).
              Si on écrit digitalRead(11), on lit la valeur sur la broche 11.
              Si on écrit analogRead(11), on lit la valeur sur la broche A11.
              Donc jamais d'adresse A0/A1/... dans le code.

              On ne peut en aucun cas (pour avoir un résultat fiable) connecter un écran LCD sur des broches analogiques car l'écran communique par voie digitale uniquement (horloge et données).

              Si cela a fonctionné, c'était par chance, à mon humble avis.
              Les afficheurs LCD doivent être branchés sur des sorties digitales, pas sur des entrées analogiques.
              XP11.41 - WIN 7 - i7 - GTX970

              Commentaire


              • #1
                Envoyé par Lami Voir le message
                ... Merci pour la méthode !
                De rien, je suis passé par là, ayant à faire face à des choses à priori incompréhensibles.

                Je suppose que tu as fais des recherches avec gogol ? J'ai trouvé ce lien et bien d'autres.

                PhM
                X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                Commentaire


                • #1
                  Envoyé par FlyingBaldy Voir le message
                  C'est bien ce que je craignais.
                  Il y a confusion entre les broches digitales et les analogiques.
                  ...
                  Bonjour FlyingBaldy,

                  Là je pense que vous allez apprendre quelque chose !

                  Votre méthode implique que vous n'utilisez jamais les broches Arduino analogiques en mode digitales lecture ou écriture et vous utilisez l'intelligence du précompilateur pour déterminer la broche à utiliser (ex. : broche 4 ou A4). Pour moi cela est très discutable et risqué pour la compréhension du code source. Pour ces raisons, je préfère utiliser la désignation avec le préfixe « A ».

                  J'ai lu, mais je ne pourrais dire que je suis certain à 100 % que c'était dans les anciens textes en français du site "Arduino.cc/fr/...", que toutes les broches Arduino peuvent être utilisées en mode digitale, de 0 à 54 et de A0 à A15. Mais que seul les broches Axx offre l'option de lecture analogique de 0 à 1023.

                  Et si j'ai bien compris ce qui vient de m'être expliqué, les boches analogiques ont plusieurs pseudonymes et l'un d'eux est la suite de la numérotation des broches digitales, soit pour une carte Uno de A0 à A7 = de 14 à 22 et sur Mega, de A0 à A15 = 55 à 71.

                  Pour une question de proximité physique avec les composants de mes montages, il est fréquent que j'utilise les ports analogiques en mode lecture ou écriture digital.

                  Pour ma part, je trouve que vous vous privez inutilement des analogiques en mode digitale lecture ou écriture.

                  Si un spécialiste pouvait nous éclairer sur les risques d'utiliser l'une ou l'autre des désignations des broches, ça pourrait être utile !

                  L'ami René
                  Tous pour un et un pour tous !
                  L'ami René
                  Tous pour un et un pour tous !

                  Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
                  Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

                  Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
                  Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

                  Commentaire


                  • #1
                    Envoyé par PhM Voir le message
                    ...
                    Je suppose que tu as fais des recherches avec gogol ? J'ai trouvé ce lien et bien d'autres.

                    PhM
                    Bonjour PhM,

                    Oui et je regarderai les tutos de ton lien, car de mémoire, à l'époque de mes recherches dans ce sens, je n'étais pas tombé sur celui-là.

                    Merci !

                    L'ami René
                    Tous pour un et un pour tous !
                    L'ami René
                    Tous pour un et un pour tous !

                    Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
                    Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

                    Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
                    Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

                    Commentaire


                    • #1
                      Hé bien oui, j'apprends quelque chose, j'ignorais que les entrées analogiques pouvaient être utilisées de la sorte.
                      Au temps pour moi.
                      Bonne chance pour trouver l'origine du problème.
                      XP11.41 - WIN 7 - i7 - GTX970

                      Commentaire


                      • #1
                        Voici un lien officiel "arduino"
                        qui dit
                        "Note
                        The analog input pins can be used as digital pins, referred to as A0, A1, etc. "
                        Reference/pinMode
                        X-Plane 10
                        En attente d'un ordinateur...

                        Commentaire


                        • #1
                          Envoyé par FlyingBaldy Voir le message
                          ... j'ignorais que les entrées analogiques pouvaient être utilisées de la sorte....
                          Tous les modes de fonctionnement sont décrits dans le manuel de référence du micro-contrôleur utilisé, par exemple ici. C'est beaucoup de lecture, pas forcément facile à comprendre quand on débute dans le domaine, mais c'est la seule source où tout est dit. Ca a aussi l'inconvénient d'être en anglais, mais bon en électronique l'anglais est indispensable.

                          PhM
                          X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                          Commentaire


                          • #1
                            Bonjour à tous et merci pour vos réponses.

                            Donc mon brochage ne devrait pas être en cause pour les problèmes que je rencontre.

                            Je poursuis la méthode des petits pas, un en avant, un en arrière, etc., mais toujours pas de solution en vue.

                            Voici comment je classe les problèmes :

                            Conflit ou bogue entre bibliothèques Arduino :

                            Car il y a variation du problème, selon l'IDE compilateur version standard dans :

                            Les dépôts officiels d’Ubuntu 1.0.5+dfsg2
                            Téléchargé du site Arduino.cc 1.5.7beta ou 1.0.5 ou 1.5.6-r2
                            Téléchargé du site Arduino.cc 1.0.5
                            Téléchargé du site Arduino.cc 1.5.6-r2
                            Téléchargé du site Arduino.cc 1.5.7beta
                            Téléchargé du site Arduino.cc Nightly

                            Bogue de X-Plane :

                            La perte des DataRefs en activant l'une ou l'autre ou les deux sections UDP « 104 XPNDR status » et « 118 autopilot values », suggère cette hypothèse.

                            Est-ce que vous utilisez ces DataRefs avec succès dans vos programmes ?

                            Vous pouvez tester ces DataRefs en mode UDP chez vous avec un mélange avec d'autres sections de l'UDP ?

                            L'ami René
                            Tous pour un et un pour tous !
                            L'ami René
                            Tous pour un et un pour tous !

                            Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
                            Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

                            Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
                            Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

                            Commentaire


                            • #1
                              104 et 118, ça correspond à quelles datarefs exactement, je pourrais tester avec ma carte teensy et arduino(1.0.5).
                              est- ce
                              104
                              sim/operation/failures/rel_xpndr (int y failure_enum Transponder failure)
                              mais 118 je ne vois pas
                              Dernière modification par thierryhl, 28 août 2014, 18h18.
                              X-Plane 10
                              En attente d'un ordinateur...

                              Commentaire


                              • #1
                                Bonjour thierryhl,

                                Un très grand merci pour ton aide !

                                Voici ce que j'utilise :

                                104 XPNDR status :
                                Squawk_Numero : ---------- PaquetUDP_Donnees [i + 8 + n]

                                118 autopilot values :
                                Autopilot_Speed_ATHR : - PaquetUDP_Donnees [i + 4 + n]
                                Autopilot_Heading : -------- PaquetUDP_Donnees [i + 8 + n]
                                Autopilot_VVI : --------------- PaquetUDP_Donnees [i + 12 + n]
                                Autopilot_Altitude_Dial : -- PaquetUDP_Donnees [i + 16 + n]
                                Autopilot_Sync_Pitch : ----- PaquetUDP_Donnees [i + 32 + n]

                                Et en voici le swicht case :

                                Code:
                                switch (PaquetUDP_Donnees [i])
                                      {
                                //...
                                      case 104:// Fréquences XPNDR status (Numéro de Squawk).
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 8 + n];
                                        }
                                        Squawk_Numero_Valeur = int (TemponComUDP.ValeurFormat1Float);
                                        if (Squawk_Numero_Ancien != Squawk_Numero_Valeur)
                                        {
                                          Squawk_Numero_Ancien = Squawk_Numero_Valeur;
                                          LCD_2.setCursor (12, 0);
                                          if (Squawk_Numero_Valeur < 10)
                                          {
                                            LCD_2.print ("   ");
                                          }
                                          else if (Squawk_Numero_Valeur < 100)
                                          {
                                            LCD_2.print ("  ");
                                          }
                                          else if (Squawk_Numero_Valeur < 1000)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          LCD_2.print (Squawk_Numero_Valeur);
                                        }
                                        break;
                                
                                      case 118:// Pilote automatique (PA).
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 4 + n];
                                        }
                                        Autopilot_Speed_ATHR_Valeur = int (round (TemponComUDP.ValeurFormat1Float));
                                        if (Autopilot_Speed_ATHR_Ancien != Autopilot_Speed_ATHR_Valeur)
                                        {
                                          Autopilot_Speed_ATHR_Ancien = Autopilot_Speed_ATHR_Valeur;
                                          LCD_1.setCursor (17, 2);
                                          if (Autopilot_Speed_ATHR_Valeur < 10)
                                          {
                                            LCD_1.print ("  ");
                                          }
                                          else if (Autopilot_Speed_ATHR_Valeur < 100)
                                          {
                                            LCD_1.print (" ");
                                          }
                                          LCD_1.print (Autopilot_Speed_ATHR_Valeur);
                                        }
                                
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 8 + n];
                                        }
                                        Autopilot_Heading_Valeur = int (round (TemponComUDP.ValeurFormat1Float));
                                        if (Autopilot_Heading_Ancien != Autopilot_Heading_Valeur)
                                        {
                                          Autopilot_Heading_Ancien = Autopilot_Heading_Valeur;
                                          LCD_2.setCursor (17, 0);
                                          if (Autopilot_Heading_Valeur < 10)
                                          {
                                            LCD_2.print ("00");
                                          }
                                          else if (Autopilot_Heading_Valeur < 100)
                                          {
                                            LCD_2.print ("0");
                                          }
                                          LCD_2.print (Autopilot_Heading_Valeur);
                                        }
                                
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 12 + n];
                                        }
                                        Autopilot_VVI_Valeur = int (round (TemponComUDP.ValeurFormat1Float));
                                        if (Autopilot_VVI_Ancien != Autopilot_VVI_Valeur)
                                        {
                                          Autopilot_VVI_Ancien = Autopilot_VVI_Valeur;
                                          LCD_2.setCursor (6, 0);
                                          if (Autopilot_VVI_Valeur > 999)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          else if (Autopilot_VVI_Valeur > 99)
                                          {
                                            LCD_2.print ("  ");
                                          }
                                          else if (Autopilot_VVI_Valeur > 9)
                                          {
                                            LCD_2.print ("   ");
                                          }
                                          else if (Autopilot_VVI_Valeur > 0)
                                          {
                                            LCD_2.print ("    ");
                                          }
                                          else if (Autopilot_VVI_Valeur > -10)
                                          {
                                            LCD_2.print ("   ");
                                          }
                                          else if (Autopilot_VVI_Valeur > -100)
                                          {
                                            LCD_2.print ("  ");
                                          }
                                          else if (Autopilot_VVI_Valeur > -1000)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          LCD_2.print (Autopilot_VVI_Valeur);
                                        }
                                
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 16 + n];
                                        }
                                        Autopilot_Altitude_Dial_Valeur = long (round (TemponComUDP.ValeurFormat1Float));
                                        if (Autopilot_Altitude_Dial_Ancien != Autopilot_Altitude_Dial_Valeur)
                                        {
                                          Autopilot_Altitude_Dial_Ancien = Autopilot_Altitude_Dial_Valeur;
                                          LCD_2.setCursor (0, 0);
                                          if (Autopilot_Altitude_Dial_Valeur < 10)
                                          {
                                            LCD_2.print ("    ");
                                          }
                                          else if (Autopilot_Altitude_Dial_Valeur < 100)
                                          {
                                            LCD_2.print ("   ");
                                          }
                                          else if (Autopilot_Altitude_Dial_Valeur < 1000)
                                          {
                                            LCD_2.print ("  ");
                                          }
                                          else if (Autopilot_Altitude_Dial_Valeur < 10000)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          LCD_2.print (long (Autopilot_Altitude_Dial_Valeur));
                                        }
                                
                                        for (int n = 0; n < 4; n = n + 1)
                                        {
                                          TemponComUDP.ValeurFormat4Byte [n] = PaquetUDP_Donnees [i + 32 + n];
                                        }
                                        Autopilot_Sync_Pitch_Valeur = TemponComUDP.ValeurFormat1Float;
                                        if (abs (Autopilot_Sync_Pitch_Ancien - Autopilot_Sync_Pitch_Valeur) >= 0.01)
                                        {
                                          Autopilot_Sync_Pitch_Ancien = Autopilot_Sync_Pitch_Valeur;
                                          LCD_2.setCursor (6, 2);
                                          if (Autopilot_Sync_Pitch_Valeur > 9.99)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          else if (Autopilot_Sync_Pitch_Valeur > 0.00)
                                          {
                                            LCD_2.print (" ");
                                          }
                                          LCD_2.print (Autopilot_Sync_Pitch_Valeur);
                                          LCD_2.setCursor (11, 2);
                                          LCD_2.print (" ");
                                        }
                                        break;
                                      }
                                Notez que je n'affiche les données que lors que les données changent de valeur pour ne pas saturer les systèmes impliqués.

                                Pour le code source complet, voir la pièce jointe.

                                Encore merci !

                                L'ami René
                                Tous pour un et un pour tous !
                                MegaRadiosPA_14.zip
                                L'ami René
                                Tous pour un et un pour tous !

                                Ordi-1 : Intel i7-12700K 5GHz, RAM 128 Go, nVidia RTX 3080 10G, Téléviseur 55" 3840x2160, 3 écrans 1920x1080, Manettes Saitek X56.
                                Linux Debian 13, X11, X-Plane 12.4.4-b2, Little NavMap v3.0.18, pilote nVidia 550.163.1.

                                Ordi-2 : Intel i7-12700KF 5GHz, RAM 48 Go, Asus GeForce STRIX-GTX 1060 6G, 2 x Écran 1920x1080.
                                Linux Kubuntu 26.04, XHSI 2.0 Beta 12 Alfa 5, pilote nVidia 535.309.

                                Commentaire

                                Chargement...
                                X