Annonce

Réduire
Aucune annonce.

X-plane Arduino et utilisation de led

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

  • #1
    Re: X-plane Arduino et utilisation de led

    Envoyé par PhM
    Envoyé par ounet
    Mon je passe par l'usb mais lorsque tu connecte ton arduino via usb Windows le voit comme un port com...
    Ok, n'ayant pas de carte Arduino je comprenais pas.

    PhM
    pas de soucis

    ounet

    Commentaire


    • #1
      Re: X-plane Arduino et utilisation de led

      Il s'agit de ce qu'on appelle un Port série (COM) virtuel. Cela nécessite un driver spécifique (FTDI dans le cas de la carte Arduino).

      Ounet,
      Ayant commencé le C et les plugins il y a deux semaines, j'ai d'abord dû lire de nombreux documents et sites, d'où mon silence radio depuis jeudi.
      Je pense avoir trouvé ce qui pose problème dans la version Windows de ton plugin.
      Il semble que FOPEN soit réservée au traitement de fichiers et ne puisse plus être utilisée pour communiquer avec un port série depuis Windows98!
      Il faut donc remplacer les instructions :
      Fopen par CreateFile (c'est la philosophie, il faut évidemment des paramètres adéquats)
      Fprintf par WriteFile (même remarque)
      Pour lire on utilise ReadFile.

      J'ai également trouvé un moyen simple pour imposer les paramètres standard 9600, n 8, 1, ainsi qu'une routine pour tester les paramètres complets actuels et les modifier (Windows only).

      J'ai modifié le plugin mais n'ayant pas encore installé Visual C++ Express et ni acheté de composants (écran, LED), je n'ai encore rien testé.
      J'ai une grosse surcharge de travail pour le moment (et c'est ma première priorité :D ), mais je mettrai le code source en ligne jeudi soir.

      Je proposerai également une autre façon de nommer les variables qui permet de raccourcir le programme et de simplifier sa mise à jour (ajout d'une variable), mais avec une légère perte de lisibilité.

      J'ai examiné avec intérêt ta routine Arduino.
      Ta routine est une boucle qui lit un caractère à chaque passage.
      Je suis parti sur une idée différente (je n'ai pas dit meilleure) qui consiste à lire une ligne complète à chaque passage dans la boucle (le premier caractère est stocké dans test puis je réalise une boucle pour lire tous les caractères de la ligne et les mettre dans indata). Ceci permet de simplifier un peu les routines pour chaque cas. Ce sera plus compréhensible quand tu verras la routine.

      Pourquoi proposer un nouveau code alors que le tien fonctionne? Parce que nous n'avons pas encore parlé des performances mais il faudra bien le faire pour ne pas trop nous pénaliser en FPS.
      En vérifiant les performances des deux codes, nous parviendrons probablement à un troisième code encore plus rapide.
      Je suggère d'ailleurs de passer directement à une vitesse de transmission de 115200 bps (au lieu de 9600) pour ne pas perdre des caractères en route.
      Calcul rapide : 100 caractères envoyés par frame * 60 frames par seconde * 2 boucles de calcul par cycle d'affichage = 12000 caractères par cycle d'affichage = environ 100 kbps (8 bits + 1 stop bit)
      Nous devrons peut-être envisager de ne pas envoyer les caractères à chaque frame mais tous les dixièmes de seconde par exemple.
      Nous pourrions également limiter au maximum les opérations du plugin (comme par exemple, la composition du message à afficher) et laisser le boulot à la carte Arduino.

      J'ai également essayé de rédiger une version linux. Il me semble que celle-ci pourrait être proche de la version mac (fopen, ...) avec quelques headers spécifiques, comme termio.h

      Je me réjouis déjà de tester la commande de servos, l'utilisation de deux cartes, ...

      Ce serait bien de réussir à faire un fat plugin (compatible mac, win et linux) mais cela dépasse largement mes compétences pour le moment.

      A jeudi...

      Dominique
      XP11.41 - WIN 7 - i7 - GTX970

      Commentaire


      • #1
        Re: X-plane Arduino et utilisation de led

        Envoyé par FlyingBaldy
        ...Pourquoi proposer un nouveau code alors que le tien fonctionne? Parce que nous n'avons pas encore parlé des performances mais il faudra bien le faire pour ne pas trop nous pénaliser en FPS....
        Ce qui pénalise les FPSs est ce qui se trouve dans ce qui est exécuté par X-Plane durant sa boucle de rendu, par exemple dans le flight loop callback. Tout ce qui est là dedans doit être le plus rapide possible, d'où l'idée de déporter ce qui prend du temps à l'extérieur de cette zone. Il ne devrait-y avoir que les accès aux variables X-Plane dans cette zone, tout le traitement transformant ces valeurs en chaines de caractères devrait-être extérieur. Je vais voir ce soir pour écrire un exemple à partir du code que tu m'as envoyé.

        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
          Re: X-plane Arduino et utilisation de led

          Envoyé par PhM
          Envoyé par FlyingBaldy
          ...Pourquoi proposer un nouveau code alors que le tien fonctionne? Parce que nous n'avons pas encore parlé des performances mais il faudra bien le faire pour ne pas trop nous pénaliser en FPS....
          Ce qui pénalise les FPSs est ce qui se trouve dans ce qui est exécuté par X-Plane durant sa boucle de rendu, par exemple dans le flight loop callback. Tout ce qui est là dedans doit être le plus rapide possible, d'où l'idée de déporter ce qui prend du temps à l'extérieur de cette zone. Il ne devrait-y avoir que les accès aux variables X-Plane dans cette zone, tout le traitement transformant ces valeurs en chaines de caractères devrait-être extérieur. Je vais voir ce soir pour écrire un exemple à partir du code que tu m'as envoyé.

          PhM
          Oui tu me l'avais deja dis, mais comme je n'ai pas trouver le moyen de faire mon traitement en dehors de cette boucle, j'ai tout mis dedans. Un exemple sera le bienvenu.

          Pour ce qui est de la refonte du programe, il serait bien de mettre les indications de qui à fait quoi afin de mieux comprendre.

          Ounet

          Commentaire


          • #1
            Re: X-plane Arduino et utilisation de led

            Envoyé par ounet
            ...Pour ce qui est de la refonte du programe, il serait bien de mettre les indications de qui à fait quoi afin de mieux comprendre.
            Il faudrait que l'on utilise un système comme SVN par exemple. Il va falloir que je regarde comment ça marche à distance car pour l'instant je n'ai qu'une installation en local sur un de mes disques.

            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
              Re: X-plane Arduino et utilisation de led

              Envoyé par FlyingBaldy
              Il s'agit de ce qu'on appelle un Port série (COM) virtuel. Cela nécessite un driver spécifique (FTDI dans le cas de la carte Arduino).

              Ounet,
              Ayant commencé le C et les plugins il y a deux semaines, j'ai d'abord dû lire de nombreux documents et sites, d'où mon silence radio depuis jeudi.
              Je pense avoir trouvé ce qui pose problème dans la version Windows de ton plugin.
              Il semble que FOPEN soit réservée au traitement de fichiers et ne puisse plus être utilisée pour communiquer avec un port série depuis Windows98!
              Il faut donc remplacer les instructions :
              Fopen par CreateFile (c'est la philosophie, il faut évidemment des paramètres adéquats)
              Fprintf par WriteFile (même remarque)
              Pour lire on utilise ReadFile.

              J'ai également trouvé un moyen simple pour imposer les paramètres standard 9600, n 8, 1, ainsi qu'une routine pour tester les paramètres complets actuels et les modifier (Windows only).

              J'ai modifié le plugin mais n'ayant pas encore installé Visual C++ Express et ni acheté de composants (écran, LED), je n'ai encore rien testé.
              J'ai une grosse surcharge de travail pour le moment (et c'est ma première priorité :D ), mais je mettrai le code source en ligne jeudi soir.

              Je proposerai également une autre façon de nommer les variables qui permet de raccourcir le programme et de simplifier sa mise à jour (ajout d'une variable), mais avec une légère perte de lisibilité.

              J'ai examiné avec intérêt ta routine Arduino.
              Ta routine est une boucle qui lit un caractère à chaque passage.
              Je suis parti sur une idée différente (je n'ai pas dit meilleure) qui consiste à lire une ligne complète à chaque passage dans la boucle (le premier caractère est stocké dans test puis je réalise une boucle pour lire tous les caractères de la ligne et les mettre dans indata). Ceci permet de simplifier un peu les routines pour chaque cas. Ce sera plus compréhensible quand tu verras la routine.

              Pourquoi proposer un nouveau code alors que le tien fonctionne? Parce que nous n'avons pas encore parlé des performances mais il faudra bien le faire pour ne pas trop nous pénaliser en FPS.
              En vérifiant les performances des deux codes, nous parviendrons probablement à un troisième code encore plus rapide.
              Je suggère d'ailleurs de passer directement à une vitesse de transmission de 115200 bps (au lieu de 9600) pour ne pas perdre des caractères en route.
              Calcul rapide : 100 caractères envoyés par frame * 60 frames par seconde * 2 boucles de calcul par cycle d'affichage = 12000 caractères par cycle d'affichage = environ 100 kbps (8 bits + 1 stop bit)
              Nous devrons peut-être envisager de ne pas envoyer les caractères à chaque frame mais tous les dixièmes de seconde par exemple.
              Nous pourrions également limiter au maximum les opérations du plugin (comme par exemple, la composition du message à afficher) et laisser le boulot à la carte Arduino.

              J'ai également essayé de rédiger une version linux. Il me semble que celle-ci pourrait être proche de la version mac (fopen, ...) avec quelques headers spécifiques, comme termio.h

              Je me réjouis déjà de tester la commande de servos, l'utilisation de deux cartes, ...

              Ce serait bien de réussir à faire un fat plugin (compatible mac, win et linux) mais cela dépasse largement mes compétences pour le moment.

              A jeudi...

              Dominique
              Dominique si hervé et phm son dispo jeudi soir on peut faire un skype meeting.

              quand pensz vous messieurs ?

              ounet

              Commentaire


              • #1
                Re: X-plane Arduino et utilisation de led

                Bonsoir m essieux les programmeurs :mrgreen: :mrgreen:

                La lecture de vos post me réjouis, malgré que je ne suive pas tous :roll:

                Envoyé par FlyingBaldy
                Il faut donc remplacer les instructions :
                Fopen par CreateFile (c'est la philosophie, il faut évidemment des paramètres adéquats)
                Fprintf par WriteFile (même remarque)
                Pour lire on utilise ReadFile.

                J'ai également trouvé un moyen simple pour imposer les paramètres standard 9600, n 8, 1, ainsi qu'une routine pour tester les paramètres complets actuels et les modifier (Windows only).

                J'ai modifié le plugin mais n'ayant pas encore installé Visual C++ Express et ni acheté de composants (écran, LED), je n'ai encore rien testé.
                J'ai une grosse surcharge de travail pour le moment (et c'est ma première priorité :D ), mais je mettrai le code source en ligne jeudi soir.
                Si tu peut faire un petit code test, je peut le compiler et l'essayer.
                Si vous le désirez, je peut vous ouvrir un compte sue le wiki pour déposer vos beta a tester.

                Je suis dispo jeudi soir.

                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
                  Re: X-plane Arduino et utilisation de led

                  Hello everybody,

                  Je suis disponible jeudi soir mais il faut que j'installe skype (son uniquement?) dont je ne me sers jamais (j'espère que ce n'est pas trop compliqué)

                  Pour lire la suite je vous conseille d'imprimer les listings en petits caractères (taille 8).

                  6. Arduino (je sais c'est mon premier point dans ce post-ci mais je préfère garder des numéros différents pour chaque idée).
                  La boucle gère à chaque passage la lecture d'une ligne complète, en lisant d'abord le caractère de contrôle/commande/test puis la valeur du paramètre. Cela simplifie également l'écriture de chaque routine correspondant à un cas (voir cas '1'.
                  Voici les premières instructions de la boucle:

                  void loop()
                  {
                  while (Serial.available() > 0) // le test If était inutile car couvert par le While
                  {
                  incomingByte = Serial.read (); // read first digit, which is the test (=command) value
                  test = incomingByte ;
                  if (incomingByte != '\n') // loop not executed if first character was ‘\n’ (empty string)
                  {
                  count = 0 ;
                  do while (incomingByte != '\n') // read the value of the parameter
                  {
                  incomingByte = Serial.read ();
                  indata[count] = incomingByte; // indata contient maintenant la valeur du paramètre uniquement
                  count ++;
                  }
                  count = count - 1
                  indata[count] = ‘\0’ // add a end of line escape character
                  i=0; // if a counter is used in one of the following routines
                  switch (test)
                  {
                  case '1': // heading select
                  {
                  lcd1.setCursor(0,1);
                  lcd1.print(indata);
                  break;
                  }
                  case '2': // ft select
                  {
                  lcd1.setCursor(8,1);
                  lcd1.print(" "); // clear lcd area beforehand to clear prior text if longer
                  lcd1.setCursor(8,1);
                  lcd1.print(indata);
                  break;
                  }


                  7. Pour le plugin lui-même, j'ai réécrit la partie de déclaration, de lecture et d'envoi des éléments à afficher par l'Arduino.
                  Cela paraît compliqué, surtout pour les déclarations mais en fait, cela simplifie grandement l'écriture de toutes les routines ainsi que l'ajout d'une nouvelle variable: il suffit d'ajouter le nom dans la liste des DataRefString, d'ajouter un code (test) dans la liste des DataRefIndex, pas nécessairement dans l'ordre alphabétique, et d'incrémenter d'une unité le nombre total d'éléments défini dans MAXINT_ITEMS ou MAX_FLOAT_ITEMS. Plus aucune modification n'est nécessaire dans le corps du plugin.
                  Le plugin ne fait plus que lire les variables et les imprimer une par une (s'il y a eu un changement par rapport au cycle précédent) précédées de la valeur DataRefIndex (1,2 ,3 ..., a , b ,c...).
                  J'ai essayé de conserver les mêmes codes test. Cette partie du plugin ne correspond plus à la routine Arduino. Tout le travail de mise en forme doit être fait dans la routine Arduino.

                  Allons-y:
                  7.1. Déclarations (références des commandes utilisées):
                  Remplacer tous les XPLMDataRef par ce qui suit:
                  #Define MAX_INT_ITEMS 16
                  #Define MAX_FLOAT_ITEMS 8

                  XPLMDataRef gIntGetDataRef[MAX_INT_ITEMS] // pour les variables Int

                  Char IntDataRefString[MAX_INT_ITEMS][255] = {
                  "sim/cockpit/radios/adf1_freq_hz", "sim/cockpit/radios/adf1_stdby_freq_hz", "sim/cockpit/radios/adf2_freq_hz", "sim/cockpit/radios/adf2_stdby_freq_hz",
                  "sim/cockpit/radios/nav1_freq_hz", "sim/cockpit/radios/nav1_stdby_freq_hz", "sim/cockpit/radios/nav2_freq_hz", "sim/cockpit/radios/nav2_stdby_freq_hz",
                  "sim/cockpit/radios/transponder_code", "sim/cockpit/radios/transponder_mode","sim/cockpit/warnings/annunciators/speedbrake",
                  "sim/cockpit2/autopilot/heading_status", "sim/cockpit2/autopilot/nav_status", "sim/cockpit2/autopilot/vvi_status", "sim/cockpit2/autopilot/approach_status",
                  "sim/cockpit/autopilot/autopilot_mode"} ;
                  // Char IntDataRefDesc[MAX_INT_ITEMS][255] = {
                  // "ADF1", "ADF1S", "NAV1", "NAV1S", "ADF2", "ADF2S", "NAV2", "NAV2S" …..} ;
                  Char IntDataRefIndex[MAX_INT_ITEMS][255] = {
                  "4", "p", "5", "q", "7", "r", "8", "s", "a", "b", "g", "h", "i", "j", "k", "l"} ;

                  XPLMDataRef gFloatGetDataRef[MAX_FLOAT_ITEMS] // pour les variables Float

                  Char FloatDataRefString[MAX_FLOAT_ITEMS][255] = {
                  "sim/cockpit/autopilot/heading", "sim/cockpit/autopilot/altitude", "sim/flightmodel/position/magpsi", "sim/cockpit2/gauges/indicators/altitude_ft_pilot",
                  "sim/cockpit/autopilot/vertical_velocity", "sim/flightmodel/position/indicated_airspeed", "sim/cockpit2/gauges/indicators/vvi_fpm_pilot", "sim/aircraft/prop/acf_reversed_pitch"} ;
                  // Char FloatDataRefDesc[MAX_FLOAT_ITEMS][255] = {
                  // "HDG", "ALT", "MAG", "ALT FT", "VV", "IAS", "VVI", "REV"} ;
                  Char FloatDataRefIndex[MAX_FLOAT_ITEMS][255] = {
                  "1", "2", "3", "t", "6", "u", "9", "m"} ;

                  XPLMDataRef gLandingGearStatusXDataref = NULL; // séparé car DataRef est un vecteur

                  XPLMDataRef gFloatSetDataRef[MAX_FLOAT_SET_ITEMS] // pour les commandes uniquement (pas d’envoi vers Arduino)


                  7.2. Dans XPluginStart - Utilise la DataRef et associe aux valeurs : remplacer toutes les lignes XPLMFindDataRef par:
                  for (int Item=0 ;Item<MAX_INT_ITEMS ; Item++)
                  {
                  gIntDataRef[Item] = XPLMFindDataRef(IntDataRefString[Item]);
                  }
                  for (int Item=0 ;Item<MAX_FLOAT_ITEMS ; Item++)
                  {
                  gFloatDataRef[Item] = XPLMFindDataRef(FloatDataRefString[Item]);
                  }

                  gLandingGearStatusXDataref = XPLMFindDataRef("sim/flightmodel2/gear/deploy_ratio");


                  7.3. Dans le SendSimDataFlightCallBack (corps du plugin):
                  L'impression consiste uniquement à envoyer une ligne composée de ce que j'appelle l'index (=test dans la routine Arduino) suivi de la valeur du paramètre.
                  Il faut tout remplacer par ce qui suit:
                  int IntValue
                  int OldIntValue[MAX_INT_ITEMS] = NULL
                  float FloatValue
                  float OldFloatValue[MAX_FLOAT_ITEMS] = NULL
                  char Msg[254]
                  int i
                  for (i=0 ; i<MAX_INT_ITEMS ; i++)
                  {
                  IntValue= XPLMGetDatai(gIntDataRef[i]);
                  If ( IntValue !=OldIntValue[i]) // supprimer si un test est plus lent qu’une transmission
                  { // supprimer si un test est plus lent qu’une transmission
                  sprintf(Msg,"%c%i\n\r", IntDataRefIndex[i], IntValue);
                  fprintf(fd, Msg);
                  fflush(fd);
                  OldIntValue[i]=IntValue ; // supprimer si un test est plus lent qu’une transmission
                  }
                  }
                  for (i=0 ; i<MAX_FLOAT_ITEMS ; i++)
                  {
                  FloatValue= XPLMGetDataf(gGetDataRef[i]);
                  If ( FloatValue !=OldFloatValue[i]) // supprimer si un test est plus lent qu’une transmission
                  { // supprimer si un test est plus lent qu’une transmission
                  sprintf(Msg,"%c%f\n\r", FloatDataRefIndex[i], FloatValue);
                  fprintf(fd, Msg);
                  fflush(fd);
                  OldFloatValue[i]=FloatValue ; // supprimer si un test est plus lent qu’une transmission
                  }
                  }

                  /* Voyant des trains d'atterrissage */ // Spécifique car vecteur (ici de longueur 10)

                  XPLMGetDatavf(gLandingGearStatusXDataref, LandingGearDeployRatio, 0, 10);
                  sprintf(Msg,"c%f %f %f\n\r", LandingGearDeployRatio[0], LandingGearDeployRatio[1], LandingGearDeployRatio[2]);
                  fprintf(fd, Msg); // regroupe c, d et e pour gain de temps
                  fflush(fd);

                  return 0.5f;


                  Voilà, c'est tout pour aujourd'hui.
                  Si vous m'avez lu jusqu'ici, vous avez mérité une bonne bière, sur mon compte naturellement.
                  Bonne nuit.
                  XP11.41 - WIN 7 - i7 - GTX970

                  Commentaire


                  • #1
                    Re: X-plane Arduino et utilisation de led

                    Quand je parlais de petits caractères, je pensais à la taille 8.
                    Mon 8 suivi d'une parenthèse s'est malencontreusement changé en émoticône!

                    Dominique
                    XP11.41 - WIN 7 - i7 - GTX970

                    Commentaire


                    • #1
                      Re: X-plane Arduino et utilisation de led

                      Envoyé par ounet
                      Dominique si hervé et phm son dispo jeudi soir on peut faire un skype meeting.
                      Sans oublier que je suis à l'heure côte est :lol: Donc le soir chez moi ça fait un petit minuit au moins en France. C'est plus simple en fin de semaine.

                      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
                        Re: X-plane Arduino et utilisation de led

                        Bonjour,

                        Une réunion en fin de semaine sera peut être dur à négocier pour moi , mais la priorité est que les "programmeurs" du projet se contact rapidement.

                        A ce sujet, j'ai trouvé ceci pour le problème C++ <--> COM, cela peut vous être utile :

                        http://files.codes-sources.com/fichier.aspx?id=18704

                        consulter ce fichier CommManager.cpp


                        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
                          Re: X-plane Arduino et utilisation de led

                          Djetdail,

                          8. Je t'ai préparé deux fichiers de test, un pour le plugin Windows, l'autre pour la carte Arduino.
                          Le plugin ouvre le port COM8, lit la fréquence NAV1 et l'envoie sur le port USB.
                          En cas d'erreur, différents messages peuvent être affichés.
                          La routine Arduino lit le port USB et affiche la valeur brute (donc sans texte ni format tel que point décimal).
                          J'ai supposé qu'un afficheur LCD de 2*20 caractères est connecté en tant que LCD2. Vérifie et modifie les numéros des pins si nécessaire.

                          Peux-tu nous dire si tout est ok ou quel message d'erreur est affiché?
                          Je croise les doigts...

                          8.1. PLUGIN
                          #include "stdafx.h"
                          #include <stdio.h>
                          #include "XPLMDisplay.h"
                          #include "XPLMDataAccess.h"
                          #include "XPLMProcessing.h"

                          HANDLE hComms;
                          DWORD dwRetFlag;

                          float SerialPortAccessCallback(float elapsedMe, float elapsedSim, int counter, void *refcon);

                          XPLMDataRef gDataRef;

                          void OpenCom(void);
                          void CloseCom(void);
                          void SendToComPort(DWORD ResponseLength, unsigned char *Buffer);
                          void ShowMessage(char *pErrorString);

                          PLUGIN_API int XPluginStart(
                          char * outName,
                          char * outSig,
                          char * outDesc)
                          {
                          strcpy(outName, "SerialPortAccess");
                          strcpy(outSig, "FB.arduino.SerialPortAccess");
                          strcpy(outDesc, "Test communication USB Windows avec Arduino");

                          gDataRef = XPLMFindDataRef("sim/cockpit/radios/nav1_freq_hz");

                          XPLMRegisterFlightLoopCallback(SerialPortAccessCal lback, 1.0, NULL);
                          return 1;
                          }

                          PLUGIN_API void XPluginStop(void)
                          {
                          }

                          PLUGIN_API int XPluginEnable(void)
                          {
                          OpenCom();
                          return 1;
                          }

                          PLUGIN_API void XPluginDisable(void)
                          {
                          CloseCom();
                          }

                          PLUGIN_API void XPluginReceiveMessage(
                          XPLMPluginID inFromWho,
                          long inMessage,
                          void * inParam)
                          {
                          }

                          float SerialPortAccessCallback(float elapsedMe, float elapsedSim, int counter, void * refcon)
                          {
                          int Value;
                          char Buffer[254];
                          Value = XPLMGetDatai(gDataRef);
                          sprintf(Buffer, "%d\n\r", Value);
                          SendToComPort(strlen(Buffer), (unsigned char *)Buffer);
                          return 0.01;
                          }
                          //---------------------------------------------------------------------------
                          void OpenCom(void)
                          {
                          DCB Dcb;
                          COMMTIMEOUTS CommTimeouts;
                          char ErrorString[80];
                          char *PortString = "\\\\.\\COM8";

                          if (hComms == 0)
                          { hComms = CreateFile(PortString,
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,
                          NULL);

                          if (hComms == INVALID_HANDLE_VALUE)
                          {
                          sprintf(ErrorString, "CreateFile Error = %d", GetLastError());
                          ShowMessage(ErrorString);
                          }
                          else
                          {
                          dwRetFlag = GetCommState(hComms, &Dcb);
                          if (!dwRetFlag)
                          {
                          sprintf(ErrorString, "GetCommState Error = %d", GetLastError());
                          ShowMessage(ErrorString);
                          }
                          dwRetFlag = GetCommTimeouts(hComms, &CommTimeouts);
                          if (!dwRetFlag)
                          {
                          sprintf(ErrorString, "GetCommTimeouts Error = %d", GetLastError());
                          ShowMessage(ErrorString);
                          }
                          }
                          }
                          else
                          {
                          ShowMessage("Com port already open");
                          }
                          }
                          //---------------------------------------------------------------------------
                          void CloseCom(void)
                          {
                          if (hComms != 0)
                          {
                          CloseHandle(hComms);
                          hComms = 0;
                          }
                          else
                          {
                          ShowMessage("Com port already closed");
                          }
                          }
                          //---------------------------------------------------------------------------
                          void SendToComPort(DWORD ResponseLength, unsigned char *Buffer)
                          {
                          DWORD dwBytesWritten;

                          if (hComms != 0)
                          dwRetFlag = WriteFile(hComms, Buffer, ResponseLength, &dwBytesWritten, NULL);
                          else
                          {
                          ShowMessage("Com port not open");
                          }
                          }
                          //---------------------------------------------------------------------------
                          void ShowMessage(char *pErrorString)
                          {
                          MessageBox(NULL, pErrorString, "Error", MB_OK);
                          }


                          8.2. ARDUINO:
                          #include <stdio.h>
                          #include <string.h>
                          #include <LiquidCrystal.h>

                          LiquidCrystal lcd2(47, 46, 45, 44, 43, 42);

                          char indata[254];
                          int count;
                          char incomingByte;

                          void setup ()
                          {
                          Serial.begin(9600);
                          lcd2.begin(2,20);
                          }

                          void loop()
                          {
                          while (Serial.available() > 0)
                          {
                          strcpy(incomingByte, " ") ;
                          count = 0 ;
                          while (incomingByte != '\n')
                          {
                          incomingByte = Serial.read ();
                          indata[count] = incomingByte;
                          count ++;
                          }
                          count = count – 1 ;
                          indata[count] = ‘\0’ ;
                          lcd2.setCursor(0,0);
                          lcd2.print(indata);
                          break;
                          }
                          }
                          XP11.41 - WIN 7 - i7 - GTX970

                          Commentaire


                          • #1
                            Re: X-plane Arduino et utilisation de led

                            Messieurs, et surtout dominique.

                            je te remercie de ton aide cependant je mettrais un bémol sur la modification complète de mon programme.
                            En effet, pour l'instant je souhaite que nous trouvions la façon d'adapter le programme que j'ai fait afin qu'il puisse fonctionner sous PC.
                            Je pense que tu as raison sur le fait, que le problème vient de l'envoie des données.

                            Lorsque cela fonctionnera, nous pourrons lors de séance de discussion ensemble apporter des modifications.
                            De plus je pense que dans un premier temps, nous pourions mettre les codes sur le wiki d'hervé fait pour l'occasion et pas sur le site d'x-plane.fr.
                            Ou nous pouvons echanger via MP.

                            De plus, j'ai tester ton code de l'arduino et il ne fonctionne pas. Pour le moment.

                            J'espere qu'hervé et toi seront dispo jeudi, moi aussi d'ailleur. afin de fiare un point de situation.
                            Je sais que phm dû au décalage ne pourra pas y participe nous lui ferrons un résumé.

                            cordialement.

                            ounet

                            Commentaire


                            • #1
                              Re: X-plane Arduino et utilisation de led

                              Hello;

                              8.1 le plugin ce compile, démarre dans x-plane sans blocage, peut être arrêté et redémarré ... cool

                              8.2 ca chie

                              a la vérifcation/compile voici le message d'erreur :

                              error.stray '\' in program

                              puis

                              error : stray '\' in program In fonction 'void loop() ':

                              La ligne :

                              count = count – 1 ; est affichée fond jaune

                              pas glop

                              Hervé

                              edit toujours dispo pour jeudi
                              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
                                Re: X-plane Arduino et utilisation de led

                                Envoyé par djetdail
                                Hello;

                                8.1 le plugin ce compile, démarre dans x-plane sans blocage, peut être arrêté et redémarré ... cool

                                8.2 ca chie

                                a la vérifcation/compile voici le message d'erreur :

                                error.stray '\' in program

                                puis

                                error : stray '\' in program In fonction 'void loop() ':

                                La ligne :

                                count = count – 1 ; est affichée fond jaune

                                pas glop

                                Hervé

                                edit toujours dispo pour jeudi
                                regarde tom Mp j'ai modifier qque ligne

                                ounet

                                Commentaire

                                Chargement...
                                X