Partage
  • Partager sur Facebook
  • Partager sur Twitter

envoie caractère vide sur port série

Sujet résolu
    1 décembre 2020 à 9:20:46

    Bonjour à tous, 

    Voila dans le cadre de mes études j'ai un projet qui consiste à la récupération d'information provenant d'un capteur de particules(SDS011) 

    Ce capteur est connecté à un Raspberry et je doit lui envoyer différentes trames pour configurer le capteur et pour demander l'envoie de données de ce capteur vers le Raspberry ( je récupère ensuite les donnée que j'envoie sur un serveur MQTT mosquitto). 

    En regardant les datasheet et un code en python donné avec le capteur, je me rends comptes que les trames à envoyer possèdent une succession de 0.

    Le problème étant que je doit non pas envoyer un 0 mais un char(0) qui est le caractère d'échappement des chaines de caractères. ce qui suit ce char(0) ou \0 n'est donc pas lu par le compilateur.

    Existe t-il un moyen pour pouvoir stocker ce caractère à plusieurs reprises dans une chaine de caractère me permettant ainsi d'envoyer la bonne trame au capteur ?

    Merci d'avance pour l'aide que vous pourrez, je l'espère m'apporter!

    Corentin

    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2020 à 9:39:44

      Hello,

      tu n'expliques pas comment tu envoies tes données mais il est clair qu'utiliser les fonctions qui attendent des strings n'est pas forcément une bonne idée. Tu as write qui prend pour paramètre un buffer et une taille … tu pourras envoyer autant de \0 que tu veux avec ça.

      -
      Edité par White Crow 1 décembre 2020 à 9:41:21

      • Partager sur Facebook
      • Partager sur Twitter
        1 décembre 2020 à 9:40:35

        Bonjour,

        Une chaine de caractères en C, c'est "une succession de caractères dont aucun n'est '\0', le '\0' servant à en indiquer la fin".
        Un tableau de caractère c'est "une succession de caractères quelconques dont on connait la taille par ailleurs".
        Donc il suffit d'utiliser des tableaux de caractères.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          1 décembre 2020 à 10:03:40

          White Crow a écrit:

          Hello,

          tu n'expliques pas comment tu envoies tes données mais il est clair qu'utiliser les fonctions qui attendent des strings n'est pas forcément une bonne idée. Tu as write qui prend pour paramètre un buffer et une taille … tu pourras envoyer autant de \0 que tu veux avec ça.

          pour gérer mon port série j'utilise la bibliothèque WiringSerial (serialPrintf(mon port, mes données)pour écrire sur le port)

          char req[]={'\xaa','\xb4','\x06','\x01','\x01','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\xff','\xff','\x06','\xab'};

          ma trame est celle ci.

          serialPrintf(fd, req);

          et je l'envoie avec cette instruction (int fd = serialOpen("/dev/ttyUSB0",9600); pour ouvrir la liaison série)

          ci je comprends bien ici ma variable req est bien un tableau de char, cependant l'envoie s'arrête au premier '\0'...



          • Partager sur Facebook
          • Partager sur Twitter
            1 décembre 2020 à 10:27:35

            si tu as un handle fd utilises write (par exemple).

            D'une manière général les fonctions dont le nom finit par f (comme printf, scanf) sont conçues pour des IO formattées, et donc les strings à 0 terminal sont des strings.

            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2020 à 10:36:57

              Merci White crow, en envoyant un tableau de caractère avec write(fd,requete,taille), j'arrive a récupérer les infos avec read(fd,buf,taille)
              • Partager sur Facebook
              • Partager sur Twitter

              envoie caractère vide sur port série

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown