Annonce

Réduire
Aucune annonce.

Cockpit maison avec Arduino (comment faire) ?

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

  • X-Plane 10.x Cockpit maison avec Arduino (comment faire) ?

    Bonjour toutes et tous,

    Un cockpit maison avec Arduino, comment faire ?

    J'ai évidemment X-Plane 10, mais j'ai aussi des cartes Arduino Uno, Mega et Nano, des afficheurs LCD et GLCD, des écrans TFT, des cartes d'extensions Ethernet, des modules Bluetooth HC-06, des télécommandes et leur capteur infrarouge, etc. Je maîtrise presque toutes ces composantes séparément, mais je souhaiterais une collaboration, un partage de votre part, pour que le tout fonctionne ensemble à fin de réaliser des modules autonomes et plug-in-play de cockpit avec X-Plane 10.

    Il y a ici et là des fils de discussions qui parlent des cartes et solutions Arduino, mais il semblerait qu'il y a beaucoup plus d'essais dans ce sens qu'il n'y parait.

    L'un des buts de cette nouvelle file de discussion serait de regroupe les solutions de cockpit avec comme base les cartes contrôleurs Arduino et le retour d'expérience des X-Planien dans ce domaine.

    Le centrage autour des cartes Arduino est justifié par le faible coût monétaire et en temps d'apprentissage pour utiliser ces produits. Ils ont le grand avantage d'être un des premiers produits dans le monde à être du matériel libre et ouverts, de la même manière que les logiciels "Open Source" le sont, l'information pour les produire est libre et gratuite. Sa diffusion est légale et même encouragée.

    Pour dire et résumer simplement, un cockpit maison à base d'Arduino coûte dix (10) fois moins cher que les produits du marché.

    Voici pour montrer l'exemple mon propre retour d'expérience :

    J'ai X-Plane depuis la sortie de la version 9 et j'en suis à la version 10.25. J'ai même fait mes premiers vols à la souris, mais une manette de jeu s'imposait. C'est suite à la lecture de revues spécialisées que je me suis tourné vers les produits Seitek. Une manette, puis deux, un panneau, puis deux, etc. En parallèle je m'initiais à l'électronique programmable et les carte Arduino, sans me douter qu'un jour ces deux domaines convergeraient l'un vers l'autre. Notez que je n'ai plus de panneau Seitek que je trouvais trop encombrent et pas suffisamment adaptable et de surcroît dispendieux pour avent faire un cockpit complet. Mais je reste avec ma double manette X52 qui est très bien et fonctionnelle.

    J'ai dernièrement essayé de convertir des cartes Arduino Nano, Uno et Mega en port jeu USB avec « dfu-programmer » à la manière des cartes Leo Bodnar, avec le plug-in TeensyControl et l'environnement de programmation Teensy et UnoJoy et MegaJoy, mais sans succès, car l'environnement Teensy est bogué actuellement.

    J'ai aussi exploré la solution avec une carte d'extension "Shield" Ethernet pour carte Arduino et l'utilisation de l'UDP, mais pour le moment, je reste bloqué sur la compilation du code source des exemples du site Web « arduino.svglobe.com ».

    Voilà pour mon petit parcours du combattant.

    Mais vous qui avez passé par les mêmes étapes que moi, où en êtes vous aujourd'hui ?

    Message pour ceux qui liront ce texte, même dans dix (10) ans en 2024, j'ai hâte de vous lire, car je suivrai toujours ce fils de discussion et votre histoire de cockpit maison m'intéressera toujours !
    Dernière modification par Lami, 17 juillet 2014, 18h50. Motif: Dans 10 ans...
    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.

  • #1
    Bonjour René,

    Je serai en congé dans quelques jours avec la possibilité de consacrer plus de temps sur ce très intéressant sujet (donc pas de réponse précise avant quelques jours).
    Suite à ton post précédent, j'ai acheté un 'shield' Ethernet pour ma carte Arduino MEGA.

    Je pense à une organisation un peu différente de la tienne, afin de privilégier la rapidité d'atteindre l'objectif (en limitant les risques liés à l'évolution parfois anarchique de X-PLANE) au détriment du coût (mais chacun a ses propres critères):
    * entrée des données : via carte LEOBODNAR uniquement (sauf éventuels cas spéciaux pouvant nécessiter un prétraitement via Arduino) car elle est insensible aux évolutions de X-Plane et que les réglages se font directement dans X-Plane.
    * sortie des données : Arduino Ethernet et cartes filles I2C, par exemple instruments de cockpit avec moteurs pas à pas pilotés par une carte spécifique (I2C vers PWM) comme celle d'ADAFRUIT (carte disponible en Belgique et routine disponible sur site ADAFRUIT) - voir page http://shop.mchobby.be/breakout/89-a...e-pca9685.html. Des afficheurs peuvent également être pilotés directement par la carte ARDUINO ou par des cartes spécialisées sur le port I2C. Il est toujours possibles d'utiliser les broches de la carte Arduino pour interfacer directement certains composants.

    Je pense commencer sans plug-in, que je ne maitrise pas encore, et utiliser pour le moment les données UDP. Je sais qu'il s'agit d'un système non fiable en ce sens qu'il peut évoluer sans information préalable, que je n'ai toujours pas trouvé de document de référence... mais il me permettra d'avancer plus rapidement (gestion de l'alimentation, des butées, des courses non linéaires, des servos sans butée, de la commande d'afficheurs, etc) en attendant un plug-in.

    Ce qui manque le plus, c'est un document de référence pour détailler le contenu des valeurs associées aux données UDP (et même aux datarefs).

    Dominique
    XP11.41 - WIN 7 - i7 - GTX970

    Commentaire


    • #1
      Envoyé par FlyingBaldy Voir le message
      ...Ce qui manque le plus, c'est un document de référence pour détailler le contenu des valeurs associées aux données UDP...
      Il est dans le répertoire X-Plane : Instructions/Sending Data to X-Plane.html
      Envoyé par FlyingBaldy Voir le message
      ...(et même aux datarefs).
      Il est également dans le répertoire X-Plane : Resources\plugins\DataRefs.txt

      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 bricolos-programmeurs

        Je ne suis pas programmeur ...... :-(

        Peut être connaissez vous ces projets, ils peuvent être source d'inspiration

        GitHub is where people build software. More than 225 million people use GitHub to discover, fork, and contribute to over 800 million projects.


        Hervé
        La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
        X -plane 12 Win 11 Pro Gigabyte Z690 I7 12700K 64DDR5 5600Mhz RTX 3090 24Go

        Commentaire


        • #1
          Bonjour FlyingBaldy,

          Envoyé par FlyingBaldy Voir le message
          ...
          Suite à ton post précédent, j'ai acheté un 'shield' Ethernet pour ma carte Arduino MEGA.

          Je pense à une organisation un peu différente de la tienne, afin de privilégier la rapidité d'atteindre l'objectif (en limitant les risques liés à l'évolution parfois anarchique de X-PLANE) au détriment du coût...
          Je fais le souhait que vous nous en disiez plus et en détail, les problèmes rencontrés, les solutions trouvées ou des demandes d'aide dans tels ou tels domaines, etc.

          Envoyé par FlyingBaldy Voir le message
          ...
          Je pense commencer sans plug-in, que je ne maitrise pas encore, et utiliser pour le moment les données UDP. Je sais qu'il s'agit d'un système non fiable en ce sens qu'il peut évoluer sans information préalable, que je n'ai toujours pas trouvé de document de référence...

          Ce qui manque le plus, c'est un document de référence pour détailler le contenu des valeurs associées aux données UDP (et même aux datarefs).

          Dominique
          Merci à la communauté de déjà avoir orienté notre ami !

          J'ai hâte de lire la suite.

          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
            Salut Hervé,

            Envoyé par djetdail Voir le message
            ...
            Peut être connaissez vous ces projets, ils peuvent être source d'inspiration

            GitHub is where people build software. More than 225 million people use GitHub to discover, fork, and contribute to over 800 million projects.


            Hervé
            Non et merci, je vais explorer dès que possible, ça semble riche en contenu.

            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
              Bonjour,

              Simplement pour vous écrire que j'ai résolu mes problèmes de compilation des exemples de code source de « Arduino Cockpit Simulator », c'est l'environnement de l'API de Teensy qui était en cause. Avec l'API Arduino 1.0.5 la compilation passe sans problème.

              Pour ce qui est de l'exemple avec 20 boutons « Analog input for buttons array », je réussis à interagir avec X-Plane, mais mes 20 boutons ne fonctionnent que comme si je n'en avais qu'un. Mon montage de circuit doit être déficient, alors comme c'est moi qui l'ai fait, c'est mois qui doit-être /$%?&* en circuit électrique !

              J'ai fait un autre circuit à 20 boutons et fait un autre code source, mais le tout plus simple et conventionnel et testé que chaque bouton fonctionnait, mais là, dans X-Plane, plus rien ne bouge, mais j'ai le « snap ...» dans l'onglet « Données ».

              En voici le brouillon du « loop () » pour ceux qui y comprennent quelque chose :

              Code:
              //*****************************************************************************
              // FONCTION LOOP = Boucle sans fin = coeur du programme.
              //*****************************************************************************
              // La fonction loop() s'exécute sans fin en boucle aussi longtemps que
              // l'Arduino est sous tension.
              
              void loop()
              {
              /*  // Liste et ordre original.
                if (BoutonsX_Plane (BOUTON_1)) EnvoyerX_Plane ("sim/flight_controls/landing_gear_down");
                if (BoutonsX_Plane (BOUTON_2)) EnvoyerX_Plane ("sim/flight_controls/landing_gear_up");
                if (BoutonsX_Plane (BOUTON_3)) EnvoyerX_Plane ("sim/engines/engage_starters");
                if (BoutonsX_Plane (BOUTON_4)) EnvoyerX_Plane ("sim/flight_controls/rudder_trim_left");
                if (BoutonsX_Plane (BOUTON_5)) EnvoyerX_Plane ("sim/flight_controls/rudder_trim_right");
                if (BoutonsX_Plane (BOUTON_6)) EnvoyerX_Plane ("sim/lights/landing_lights_toggle");
                if (BoutonsX_Plane (BOUTON_7)) EnvoyerX_Plane ("sim/audio_panel/monitor_audio_nav1");
                if (BoutonsX_Plane (BOUTON_8)) EnvoyerX_Plane ("sim/audio_panel/monitor_audio_nav2");
                if (BoutonsX_Plane (BOUTON_9)) EnvoyerX_Plane ("sim/autopilot/servos_and_flight_dir_on");
                if (BoutonsX_Plane (BOUTON_10)) EnvoyerX_Plane ("sim/transponder/transponder_ident");
                if (BoutonsX_Plane (BOUTON_11)) EnvoyerX_Plane ("sim/radios/com1_standy_flip");
                if (BoutonsX_Plane (BOUTON_12)) EnvoyerX_Plane ("sim/radios/com2_standy_flip");
                if (BoutonsX_Plane (BOUTON_13)) EnvoyerX_Plane ("sim/radios/nav1_standy_flip");
                if (BoutonsX_Plane (BOUTON_14)) EnvoyerX_Plane ("sim/radios/nav2_standy_flip");
                if (BoutonsX_Plane (BOUTON_15)) EnvoyerX_Plane ("sim/radios/adf1_standy_flip");
                if (BoutonsX_Plane (BOUTON_16)) EnvoyerX_Plane ("sim/autopilot/approach");
                if (BoutonsX_Plane (BOUTON_17)) EnvoyerX_Plane ("sim/autopilot/fdir_servos_down_one");
                if (BoutonsX_Plane (BOUTON_18)) EnvoyerX_Plane ("sim/autopilot/fdir_servos_up_one");
                if (BoutonsX_Plane (BOUTON_19)) EnvoyerX_Plane ("sim/autopilot/altitude_arm");
                if (BoutonsX_Plane (BOUTON_20)) EnvoyerX_Plane ("sim/autopilot/heading");
                */
                // Ici les instructions à exécuter par le programme principal.
                // Liste et ordre personnalisé.
                if (BoutonsX_Plane (BOUTON_1)) EnvoyerX_Plane ("sim/autopilot/heading_up");
                if (BoutonsX_Plane (BOUTON_2)) EnvoyerX_Plane ("sim/autopilot/heading_down");
                if (BoutonsX_Plane (BOUTON_3)) EnvoyerX_Plane ("sim/autopilot/airspeed_up");
                if (BoutonsX_Plane (BOUTON_4)) EnvoyerX_Plane ("sim/autopilot/airspeed_down");
                if (BoutonsX_Plane (BOUTON_5)) EnvoyerX_Plane ("sim/autopilot/altitude_up");
                if (BoutonsX_Plane (BOUTON_6)) EnvoyerX_Plane ("sim/autopilot/altitude_down");
                if (BoutonsX_Plane (BOUTON_7)) EnvoyerX_Plane ("sim/autopilot/vertical_speed_up");
                if (BoutonsX_Plane (BOUTON_8)) EnvoyerX_Plane ("sim/autopilot/vertical_speed_down");
                if (BoutonsX_Plane (BOUTON_9)) EnvoyerX_Plane ("sim/radios/stby_com1_coarse_up");
                if (BoutonsX_Plane (BOUTON_10)) EnvoyerX_Plane ("sim/radios/stby_com1_coarse_down");
                if (BoutonsX_Plane (BOUTON_11)) EnvoyerX_Plane ("sim/radios/stby_com1_fine_up");
                if (BoutonsX_Plane (BOUTON_12)) EnvoyerX_Plane ("sim/radios/stby_com1_fine_down");
                if (BoutonsX_Plane (BOUTON_13)) EnvoyerX_Plane ("sim/radios/com1_standy_flip");
                if (BoutonsX_Plane (BOUTON_14)) EnvoyerX_Plane ("sim/radios/nav1_standy_flip");
                if (BoutonsX_Plane (BOUTON_15)) EnvoyerX_Plane ("sim/radios/adf1_standy_flip");
                if (BoutonsX_Plane (BOUTON_16)) EnvoyerX_Plane ("sim/autopilot/approach");
                if (BoutonsX_Plane (BOUTON_17)) EnvoyerX_Plane ("sim/autopilot/fdir_servos_down_one");
                if (BoutonsX_Plane (BOUTON_18)) EnvoyerX_Plane ("sim/autopilot/fdir_servos_up_one");
                if (BoutonsX_Plane (BOUTON_19)) EnvoyerX_Plane ("sim/autopilot/altitude_arm");
                if (BoutonsX_Plane (BOUTON_20)) EnvoyerX_Plane ("sim/autopilot/heading");
              }
              //*****************************************************************************
              Est-ce que ce code devrait fonctionner (en pièce jointe l'archive de toutes les sources MesBoutonsMega.zip).

              J'aurais besoin d’éclaircissement pour ce qu'il y a a faire dans le panneau de configuration « Données Entrées & Sortie » en lien avec ce code source, où et quoi coché ou modifier quelque chose ?

              Merci d'avance aux généreux répondants.

              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 djetdail Voir le message
                ...
                Peut être connaissez vous ces projets, ils peuvent être source d'inspiration

                GitHub is where people build software. More than 225 million people use GitHub to discover, fork, and contribute to over 800 million projects.


                Hervé
                Rebonjour Hervé,

                Bon, finalement, il n'y avait que 11 dépôts sur le sujet Arduino <-> X-Plane et aucun ne m'a accroché.

                Mais, c'est bête de ma part, je n'avais pas remarqué et/ou pris conscience que l'on pouvait faire des recherches dans « github.com ».

                Merci pour l’astuce et de nous rafraîchir la mémoire et les neurones.

                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
                  Bonjour,

                  Bonne nouvelle, un encodeur (ou un codeur, je ne sais pas quel est le nom le plus approprié), X-Plane, Arduino Mega et carte d’extension Ethernet, ça fonctionne !

                  J'en ai deux modèles que j'avais récupérés d'un système de son et don voici des photos :

                  Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Encodeur 3 pattes_3.jpg 
Affichages :	1 
Taille :		57,7 Ko 
ID : 			457871 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Encodeur 3 pattes_2.jpg 
Affichages :	1 
Taille :		68,3 Ko 
ID : 			457872 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Encodeur 3 pattes_1.jpg 
Affichages :	1 
Taille :		66,8 Ko 
ID : 			457873

                  Et en voici le montage :

                  Cliquez sur l'image pour la voir en taille réelle 

Nom : 		ArduinoMegaR3CarteEthernetR3-Encodeur3Pattes_bb.jpg 
Affichages :	1 
Taille :		173,1 Ko 
ID : 			457869

                  Les mouvement générés par ces encodeur manque de précision, mais je présume que c'est causé par l'étalonnage qui en est fait dans le code source de l'exemple « Rotary Encoders ».

                  Le code source de base :

                  Code:
                  /* Sample of improved code for one encoder for X-Plane
                  Vlad
                  [url]http://svglobe.com[/url]
                  */
                  //------------------------------------
                  #include <SPI.h>         
                  #include <Ethernet.h>
                  #include <EthernetUdp.h> 
                  //------------------------------------
                  const byte ENCODEUR_1 = A12;
                  const byte ENCODEUR_2 = A13;
                  // MAC address of Ethernet Shield  (default)
                  byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};
                  // IP address for Ethernet shield (any free addr in your local network)
                  IPAddress ip  (192, 168, 2, 14);
                  IPAddress ipx (192, 168, 2, 3);// IP address of the com****r with X-Plane installed
                  unsigned int localPort = 49001;// Port to listen from X-plane (default)
                  unsigned int XP = 49000;// Port to send to x-plane
                  EthernetUDP Udp;// EthernetUDP instance to send/receive packets over UDP
                  //------------------------------------
                  byte encoder;
                  byte enc_pre;
                  boolean dir;
                  //------------------------------------SETUP section -------------------------------
                  void setup()
                  {
                    pinMode (ENCODEUR_1, INPUT_PULLUP);
                    pinMode (ENCODEUR_2, INPUT_PULLUP);
                  // ------------------------ Auto IP identifying (by DHCP)----------------------
                    Ethernet.begin (mac);    // start the Ethernet connection:DHCP (Get local IP)
                    ip = Ethernet.localIP ();// Set your IP
                    Ethernet.begin (mac, ip);
                    Udp.begin (localPort);   // start UDP (listening default X-Plane port 49001)
                  }
                  void loop() 
                  {
                  //================== Encoder on the pins  #5 and #6 ==================
                    bitWrite (encoder, 0, !digitalRead (ENCODEUR_1));// Read encoder pin #1
                    bitWrite (encoder, 1, !digitalRead (ENCODEUR_2));// Read encoder pin #2 
                    if (encoder != enc_pre)
                    {
                      switch (enc_pre)
                      {
                        case 0: if (encoder == 1 )  dir = 1;  else  dir = 0; break;
                        case 1: if (encoder == 3 )  dir = 1;  else  dir = 0; break; 
                        case 2: if (encoder == 0 )  dir = 1;  else  dir = 0; break;
                        case 3: if (encoder == 2 )  dir = 1;  else  dir = 0; break;
                      }
                      enc_pre = encoder;
                      // Checking if encoder is in detent position (for 01 and 10 detents), 
                      // to exclude doubled value change.
                      if (encoder == 1 || encoder == 2)
                      {
                        // For other encoders it can be  00 or 11 detents (0 and 3 ), check your encoder.
                        if (dir) cmd("sim/radios/obs_HSI_up");
                        else cmd("sim/radios/obs_HSI_down");        
                      }
                    }
                  }
                  //====================== CMND data  procedure ================================ 
                  void cmd (char Data_com [])
                  {
                    Udp.beginPacket (ipx, XP);
                    Udp.write ("CMND0");
                    Udp.write (Data_com);
                    Udp.endPacket();
                  }
                  Mais, c'est essentiellement dans le code qui suit que ça se passe (librement traduit avec Google) :

                  Code:
                  void loop ()
                  {
                    // Encodeur sur les broches 1 et 2.
                    // Lire l'encodeur broche # 1.
                    bitWrite (Encodeur_1_EtatActuel, 0, !digitalRead (ENCODEUR_1_1));
                    // Lire l'encodeur broche # 2.
                    bitWrite (Encodeur_1_EtatActuel, 1, !digitalRead (ENCODEUR_1_2));
                    if (Encodeur_1_EtatActuel != Encodeur_1_EtatPrecedent)
                    {
                      switch (Encodeur_1_EtatPrecedent)
                      {
                        case 0: if (Encodeur_1_EtatActuel == 1 ) Encodeur_1_Direction = 1; else Encodeur_1_Direction = 0; break;
                        case 1: if (Encodeur_1_EtatActuel == 3 ) Encodeur_1_Direction = 1; else Encodeur_1_Direction = 0; break; 
                        case 2: if (Encodeur_1_EtatActuel == 0 ) Encodeur_1_Direction = 1; else Encodeur_1_Direction = 0; break;
                        case 3: if (Encodeur_1_EtatActuel == 2 ) Encodeur_1_Direction = 1; else Encodeur_1_Direction = 0; break;
                      }
                      Encodeur_1_EtatPrecedent = Encodeur_1_EtatActuel;
                      // Vérifier si l'encodeur est en position d'arrêt (01 et 10 pour les détentes), 
                      // pour exclure le changement de la valeur doublée.
                      if (Encodeur_1_EtatActuel == 1 || Encodeur_1_EtatActuel == 2)
                      {
                        // Pour les autres encodeurs, il peut être 00 ou 11 états (0 à 3), 
                        // vérifiez votre codeur.
                        if (Encodeur_1_Direction) EnvoyerX_Plane ("sim/radios/obs_HSI_up");
                        else EnvoyerX_Plane ("sim/radios/obs_HSI_down");        
                      }
                    }
                  }
                  Et je ne sais pas si ce qui suit s'applique à ces deux encodeurs :

                  Vérifier si l'encodeur est en position d'arrêt (01 et 10 pour les détentes), pour exclure le changement de la valeur doublée.

                  Pour les autres encodeurs, il peut être 00 ou 11 états (0 à 3), vérifiez votre codeur.
                  Comment vérifier mes encodeurs et/ou améliorer le circuit ou le code source pour plus de finesse ? Vous vous savez ?

                  Bonne fin de semaine !

                  L'ami René
                  Tous pour un et un pour tous !
                  P.S. : En pièce jointe, une archive des sources francisées et bonifiées à la sauce René (un brouillon : Encodeur1Mega.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


                  • #1
                    Bonjour,

                    Bon j'ai progressé un peu dans mon projet de télécommander X-Plane en recyclant une vieille télécommande, en lieu et place de boutons et d'encodeurs, je trouve cela plus sympa et c'est sans fils.

                    C'est une télécommande Motorola URC600 (d'un récepteur satellite de Shaw Direct) :

                    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		remote_irc600_large.jpg 
Affichages :	1 
Taille :		34,3 Ko 
ID : 			457878

                    Voici les paramètres X-Plane programmés (et il reste des boutons non utilisés de la télécommande) :

                    TelecommandeBoutonPower;------------EnvoyerCommandeX_Plane ("sim/engines/engage_starters");
                    TelecommandeBoutonSource:-----------EnvoyerCommandeX_Plane ("sim/instruments/barometer_down");
                    TelecommandeBoutonAspect:-----------EnvoyerCommandeX_Plane ("sim/instruments/barometer_up");
                    TelecommandeBoutonPause:=======EnvoyerDonneesX_Pla ne ("sim/instruments/barometer_current_inhg", 29.92);
                    TelecommandeBoutonArret:--------------EnvoyerCommandeX_Plane ("sim/radios/obs_HSI_down");
                    TelecommandeBoutonEnregistrer:------EnvoyerCommandeX_Plane ("sim/radios/obs_HSI_up");
                    TelecommandeBoutonDebut:-------------EnvoyerCommandeX_Plane ("sim/radios/obs_HSI_down");
                    TelecommandeBoutonJouer:--------------EnvoyerCommandeX_Plane ("");
                    TelecommandeBoutonFin:-----------------EnvoyerCommandeX_Plane ("sim/radios/obs_HSI_up");
                    TelecommandeBoutonRecycle1:---------EnvoyerCommandeX_Plane ("sim/flight_controls/rudder_trim_left");
                    TelecommandeBoutonRecycle2:---------EnvoyerCommandeX_Plane ("sim/flight_controls/rudder_trim_right");
                    TelecommandeBoutonMenu:--------------EnvoyerCommandeX_Plane ("sim/transponder/transponder_thousands_up");
                    TelecommandeBoutonFav:-----------------EnvoyerCommandeX_Plane ("sim/transponder/transponder_hundreds_up");
                    TelecommandeBoutonPVR:----------------EnvoyerCommandeX_Plane ("sim/transponder/transponder_tens_up");
                    TelecommandeBoutonGoBackRetour:--EnvoyerCommandeX_Plane ("sim/transponder/transponder_ones_up");
                    TelecommandeBoutonHaut:----------------EnvoyerCommandeX_Plane ("sim/autopilot/altitude_up");
                    TelecommandeBoutonGauche:------------EnvoyerCommandeX_Plane ("sim/autopilot/heading_down");
                    TelecommandeBoutonEnterOK:----------EnvoyerCommandeX_Plane ("sim/autopilot/heading");
                    TelecommandeBoutonDroite:-------------EnvoyerCommandeX_Plane ("sim/autopilot/heading_up");
                    TelecommandeBoutonBas:----------------EnvoyerCommandeX_Plane ("sim/autopilot/altitude_down");
                    TelecommandeBoutonINFO:---------------EnvoyerCommandeX_Plane ("sim/audio_panel/monitor_audio_nav1");
                    TelecommandeBoutonGuide:-------------EnvoyerCommandeX_Plane ("sim/autopilot/servos_on");
                    TelecommandeBoutonExit:----------------EnvoyerCommandeX_Plane ("sim/audio_panel/monitor_audio_nav2");
                    TelecommandeBoutonSonPlus:----------EnvoyerCommandeX_Plane ("sim/autopilot/vertical_speed_up");
                    TelecommandeBoutonSonMoins:--------EnvoyerCommandeX_Plane ("sim/autopilot/vertical_speed_down");
                    TelecommandeBoutonA:-------------------EnvoyerCommandeX_Plane ("sim/autopilot/autothrottle_on");
                    TelecommandeBoutonB:-------------------EnvoyerCommandeX_Plane ("sim/autopilot/altitude_hold_armed");
                    TelecommandeBoutonC:-------------------EnvoyerCommandeX_Plane ("sim/autopilot/vnav_armed");
                    TelecommandeBoutonD:-------------------EnvoyerCommandeX_Plane ("sim/autopilot/approach");
                    TelecommandeBoutonCH_Plus:---------EnvoyerCommandeX_Plane ("sim/autopilot/airspeed_up");
                    TelecommandeBoutonCH_Moins:-------EnvoyerCommandeX_Plane ("sim/autopilot/airspeed_down");
                    TelecommandeBoutonMuteSilence:===EnvoyerDonneesX_P lane("sim/autopilot/HSI_selector", 1);
                    TelecommandeBoutonLastDernier:===EnvoyerDonneesX_P lane("sim/autopilot/HSI_selector", 3);
                    TelecommandeBouton1:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_com1_coarse_up");
                    TelecommandeBouton2:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_com1_fine_up");
                    TelecommandeBouton3:--------------------EnvoyerCommandeX_Plane ("sim/radios/com1_standy_flip");
                    TelecommandeBouton4:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_com1_coarse_down");
                    TelecommandeBouton5:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_com1_fine_down");
                    TelecommandeBouton6:--------------------EnvoyerCommandeX_Plane ("");
                    TelecommandeBouton7:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_nav1_coarse_up");
                    TelecommandeBouton8:--------------------EnvoyerCommandeX_Plane ("sim/radios/stby_nav1_fine_up");
                    TelecommandeBouton9:-------------------EnvoyerCommandeX_Plane ("sim/radios/nav1_standy_flip");
                    TelecommandeBoutonHelpAide:--------EnvoyerCommandeX_Plane ("sim/radios/stby_nav1_coarse_down");
                    TelecommandeBouton0:-------------------EnvoyerCommandeX_Plane ("sim/radios/stby_nav1_fine_down");
                    TelecommandeBoutonOptions:----------EnvoyerCommandeX_Plane ("sim/flight_controls/landing_gear_toggle");
                    Les trois lignes avec « === » sont les lignes qui ne fonctionnent pas, toutes les autres oui.

                    C'est beaucoup de fonctions pour un circuit avec 3 fils un câble USB et un câble réseau RJ45.

                    Pour tout ce qui est d'envoyer des commandes (ex. : activer le pilote automatique ou varier le cap), ça fonction bien, mais pour tout ce qui concerne envoyer des données (ex. : le HSI_selector = 3 ou le barometer_current_inhg = 29.92), ça ne fonctionne pas.

                    Vous trouverez en pièce jointe une archive de tout le projet pour tester à la maison. Si vous n'avez pas la même télécommande, pas de problème, j'ai ajouté aux sources une source pour récupérer vous-même les codes générés pas vos propres télécommandes. C'est le jour du deux pour un aujourd'hui.

                    Si vous avez une solution pour le non-fonctionnement de l'envoi des données, je suis très très preneur.

                    Pour rappel, le système est composé d'une carte Arduino (tous les modèles fonctionneront), une carte d'extension "shield" Ethernet, d'un capteur à infrarouge type VS1838B (TSOP1838), d'une quelconque télécommande, 4 fils un câble USB et un câble réseau RJ45 et une résistance 100 Ohm.

                    Bon vol !

                    L'ami René
                    Tous pour un et un pour tous !
                    P.s. : 45 fonctions et je n'utilise q'une broche en sortie et une broche en entré !!!
                    Fichiers attachés
                    Dernière modification par Lami, 13 juillet 2014, 21h25. Motif: Le P.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
                      Envoyé par Lami Voir le message
                      Bonjour,
                      Les trois lignes avec « === » sont les lignes qui ne fonctionnent pas, toutes les autres oui.
                      Peut-être à cause des espaces dans le mot "x-plane" de ton code.

                      Ton sujet est très intéressant..
                      X-Plane 10
                      En attente d'un ordinateur...

                      Commentaire


                      • #1
                        Bonjour Thierry,

                        Je suis heureux de ton passage ici, car tu ne donnes pas beaucoup de nouvelles dans ta file de discussion « Construction cockpit cessna 172 (Work In Progress) ».

                        L'affichage-écran nous joue des tours ! Il n'y a pas d'espace dans le nom des deux fonctions, c'est « EnvoyerCommandeX_Plane » et « EnvoyerDonneesX_Plane ». Probablement dû au texte en italique de la balise « [QUOTE] ». Mais je suis heureux de voir que tu as de l’œil et le souci du détail.

                        Qu'elles soient bonnes ou mauvaises, donne de tes nouvelles, un peu de « (Work In Progress) », ça nous change les idées et ça peut nous en donnée ! Le partage, ça a toujours du bon.

                        J'ai hâte de te lire.

                        Si tu veux, je te coache pour un recyclage de télécommande chez toi. C'est trop simple et facile pour s'en passer et moi j'aime bien recycler au maximum tout ce qui me passe sous la main. Procure-toi des transistors a infrarouge type VS1838B, ça ne coûte pas 1 $ l'unité et je suis persuadé que tu as une vielle télécommande qui traîne par ci ou par là. Et ça fonctionne très bien, même sans résistance et condensateur, seulement avec le transistor.

                        En image :

                        Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B-001.jpg 
Affichages :	1 
Taille :		116,0 Ko 
ID : 			457880 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B-002.jpg 
Affichages :	1 
Taille :		30,7 Ko 
ID : 			457881 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B-999.jpg 
Affichages :	1 
Taille :		30,5 Ko 
ID : 			457882

                        Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B Exemple de montage 1.jpg 
Affichages :	1 
Taille :		20,5 Ko 
ID : 			457883 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B Exemple de montage 2.jpg 
Affichages :	1 
Taille :		10,0 Ko 
ID : 			457884 Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B Exemple de montage 3.jpg 
Affichages :	1 
Taille :		11,6 Ko 
ID : 			457885

                        Évite le produit suivante, les soudures sont très fragiles :

                        Cliquez sur l'image pour la voir en taille réelle 

Nom : 		VS1838B-000.jpg 
Affichages :	1 
Taille :		46,8 Ko 
ID : 			457886

                        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
                          Bonjour,

                          Pour ceux qui testeront les dernières sources, en prime, un imprimé de la configuration des touches de la télécommande et son fichier d'origine (LibreOfficeDraw) pour le modifier à votre convenance et pour tenir compte des changements que vous pourriez apporter à la configuration des touches et des commandes associées.

                          Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Télécommande Motorola URC600 (récepteur satellite de Shaw).jpg 
Affichages :	1 
Taille :		14,7 Ko 
ID : 			457887

                          Il y a eu quelques ajouts et il ne me reste que deux touches à attribuer. Pour ne pas laisser des touches sans attribution, en attente de suggestion de votre part, j'ai doublé la fonction « heading_down » aux touches « Gauche » et « Vol - », et la fonction « heading_up » aux touches « Vol + » et « Droit ».

                          Cela donne pour le moment :

                          Paramètres X-Plane programmés (par groupe de touches) :

                          (Power)_________engage_starters

                          (Source)________barometer_down
                          (Aspect)________barometer_up
                          (Pause)_________barometer_current_inhg

                          (Arret)_________obs_HSI_down
                          (Enregistrer)___obs_HSI_up

                          (Debut)_________heading_down
                          (Jouer)_________heading
                          (Fin)___________heading_up

                          (Recycle1)______rudder_trim_left
                          (Recycle2)______rudder_trim_right

                          (Menu)__________transponder_thousands_up
                          (Fav)___________transponder_hundreds_up
                          (PVR)___________transponder_tens_up
                          (GoBackRetour)__transponder_ones_up

                          (Haut)__________altitude_up
                          (Gauche)________heading_down
                          (EnterOK)_______altitude_hold_armed
                          (Droite)________heading_up
                          (Bas)___________altitude_down

                          (INFO)__________stby_adf1_hundreds_up
                          (Guide)_________stby_adf1_tens_up
                          (Exit)__________stby_adf1_ones_up

                          (SonPlus)_______vertical_speed_up
                          (SonMoins)______vertical_speed_down

                          (A)_____________servos_on
                          (B)_____________autothrottle_on
                          (C)_____________vnav_armed
                          (D)_____________approach

                          (CH_Plus)_______airspeed_up
                          (CH_Moins)______airspeed_down

                          (MuteSilence)___HSI_selector_down
                          (LastDernier)___HSI_selector_up

                          (1)_____________stby_com1_coarse_up
                          (2)_____________stby_com1_fine_up
                          (3)_____________com1_standy_flip
                          (4)_____________stby_com1_coarse_down
                          (5)_____________stby_com1_fine_down

                          (6)_____________adf1_standy_flip

                          (7)_____________stby_nav1_coarse_up
                          (8)_____________stby_nav1_fine_up
                          (9)_____________nav1_standy_flip
                          (HelpAide)______stby_nav1_coarse_down
                          (0)_____________stby_nav1_fine_down

                          (Options)_______landing_gear_toggle
                          Je serais curieux de connaître le nombre des personnes qui essayera les différentes sources pour télécommande, alors, un petit message pour l'indiquer serait apprécié.

                          L'ami René
                          Tous pour un et un pour tous !
                          Motorola-URC600 (avec texte).odg.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


                          • #1
                            Rebonjour,

                            Je pense que je viens de trouver un bogue, mais d'où vient-il ?

                            Je n'arrive pas à activer "Armed" la « V/S » avec le pilote automatique. Je pensais que le dataref pour cela était « altitude_hold_armed », mais semble que non. Puis, j'ai pensé que cela pouvait être « vnav_armed », mais semble que non.

                            Et dans mon programme, c'est codé comme cela :
                            Code:
                            ...
                                  case TelecommandeBoutonEnterOK:
                                    EnvoyerCommandeX_Plane ("sim/autopilot/altitude_hold_armed");
                            ...
                                  case TelecommandeBoutonC:
                                    EnvoyerCommandeX_Plane ("sim/autopilot/vnav_armed");
                            ...
                            Vous pouvez- m'aider sur ce coup-là ?


                            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
                              T'aides-tu de "Dataref Editor" pour voir ce qui est utilisé comme dataref ?
                              Je m'en sert régulièrement et c'est très utile.
                              X-Plane 10
                              En attente d'un ordinateur...

                              Commentaire

                              Chargement...
                              X