Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 565
    Points : 115
    Points
    115

    Par défaut Byte depuis un tableau

    Bonjour,

    Je transmet, au travers de la liaison série un ensemble de data. Exemple :
    1000/0b00000001/0;3000/0b00000000/0;3500/0b00000001/0;3800/0b00000000/1
    Je me retrouve donc avec 4 parties contenant chacune, dans un tableau (j'ai mis les index [x]):
    [0] 1000/0b00000001/0
    [1] 3000/0b00000000/0
    [2] 3500/0b00000001/0
    [3] 3800/0b00000000/1
    Je rencontre un souci avec la partie binaire. Je la retrouve bien si je la place dans une variable string, ors, j'aimerais la garder au format binaire sous un Byte.

    Il s'avère que, quand j'exécute mon code je retrouve ceci :
    1000
    31
    0
    3000
    43
    0
    3500
    55
    0
    3800
    67
    1
    Comment 0b00000001 devient 31 ? si je convertit 0x01 et 1
    Comment 0b00000000 devient 43 ? si je convertit 0x00 et 0
    Comment 0b00000001 devient 55 ? si je convertit 0x01 et 1
    Comment 0b00000000 devient 67 ? si je convertit 0x00 et 0

    Donc c'est erroné !

    Voilà donc le morceau de code qui fait en partie le taff :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /* VARIABLES*/
    int timer = 0;
    byte port = 0x00;
    boolean stopWave = 0;
     
    for(int j = 0; j < numCmds; j++)
    {
       timer = atoi(strtok_r(cmds[j], "/", &ptr));
       port = strtok_r(NULL, "/", &ptr);                   //Ligne qui pose problème
       stopWave = atoi(strtok_r(NULL, "/", &ptr));
     
       Serial.println(timer);              //Ok
       Serial.println(port);               //NOK
       Serial.println(stopWave);       //Ok
    }
    Si voua avez une petite idée, j'ai essayer déjà pas mal de chose mais sans réel succès.

  2. #2
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 152
    Points : 9 977
    Points
    9 977

    Par défaut

    Bonsoir,

    je ferais un découpage supplémentaire (split) avec le "/" comme séparateur puis j'appliquerai cette méthode pour convertir les binaires en entier :
    https://stackoverflow.com/questions/...eger-with-atoi

  3. #3
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 565
    Points : 115
    Points
    115

    Par défaut

    Et, justement, j'ai essayé... sans succès !

    Donc, j'ai essayé atoi, strtol...

    Bref, compliqué !

    Mais j'avance, mon code aussi, je débug pas mal de choses à côté.

    Merci du coup de main Auteur

  4. #4
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 7 152
    Points : 9 977
    Points
    9 977

    Par défaut

    Trois liens :
    https://www.arduino.cc/reference/en/.../stringobject/
    https://forum.arduino.cc/index.php?topic=309733.0
    http://www.cplusplus.com/reference/cstring/strtok/

    J'ai modifié la première chaîne binaire pour valider le résultat

    Code Arduino : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      String a, w;
      char *pch;
      int n;
     
      a = "1000/0b00011001/0;3000/0b00000000/0;3500/0b00000001/0;3800/0b00000000/1";
     
      Serial.begin(9600);
     
      pch = strtok(a.c_str(), ";/");
     
      while (pch!=NULL)
      {
        w = pch;
        if (w.startsWith("0b"))
        {
          w = w.substring(2);
          n = strtol(w.c_str(), NULL, 2);
        }
        else
          n = w.toInt();
     
        Serial.println(n);
     
        pch = strtok(NULL, ";/");
     
      }

    affiche
    1000
    25
    0
    3000
    0
    0
    3500
    1
    0
    3800
    0
    1

  5. #5
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    janvier 2005
    Messages
    565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : janvier 2005
    Messages : 565
    Points : 115
    Points
    115

    Par défaut

    C'est ce que je viens de faire, c'est parfait ! Ca a été un peu galère

    Merci Auteur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une image depuis un tableau de byte javafx
    Par ouste4863 dans le forum JavaFX
    Réponses: 2
    Dernier message: 13/01/2019, 13h29
  2. Réponses: 8
    Dernier message: 03/02/2009, 13h24
  3. Réponses: 1
    Dernier message: 03/06/2008, 14h47
  4. [C#]Obtenir un IntPtr depuis un tableau 2d
    Par Fynchi dans le forum C#
    Réponses: 2
    Dernier message: 27/11/2006, 16h49
  5. Update depuis un tableau
    Par psychoBob dans le forum PHP & MySQL
    Réponses: 3
    Dernier message: 07/01/2006, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo