IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Arduino Discussion :

Valeurs dans le port série qui diffèrent


Sujet :

Arduino

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut Valeurs dans le port série qui diffèrent
    Bonjour à tous,

    Je suis en classe de terminale STI2D et je travaille pour un projet de fin d'année mais je suis face à un problème.

    Pour vous expliquer, mon camarade m'envoi en continu des valeurs égales à -100 via xBee. Je reçois ces valeurs mais comme j'en reçois plusieures je suis contraint de les différencier c'est pour ça qu'il y a un tiret devant.

    Dans mon code je supprime ce tiret et garde que le 100 mais au moment de print ceci dans le port série, certaines valeurs sont "mangées", "tronquées". Je ne comprends pas pourquoi et donc ça me fausse tous mes résultats.

    Ci dessous une capture d'écran:

    Nom : 9c64e96b8543dee6dbc6ea5880797626f7699c49.png
Affichages : 609
Taille : 163,2 Ko

    Et mon code :

    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
    17
    18
    19
    20
    21
    22
    23
    void getLivraison(){
     
        if (Serial.available())  {
        char e = Serial.read();  //gets one byte from serial buffer
        if (e == '+') {
          readStringLivraison = readStringLivraison.substring(-4, 0);
          int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
          Serial.println("valeur de la livraison:");
          Serial.println(resultatLivraison);
          if (resultatLivraison == 300){
            old_valeur_livraison = "3";
          }
          if (resultatLivraison == 304){
            old_valeur_livraison = "4";
          }
          readStringLivraison=""; //clears variable for new input    
        }
        else {    
          readStringLivraison += e; //makes the string readString
        }
      }
     
    }
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour zkimi

    Si j'ai bien compris, tu reçois des valeurs avec un moins devant comme -100 ou -55 ou -9 et tu dois supprimer ce signe moins?
    Tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readStringLivraison = readStringLivraison.substring(-4, 0);
    Pourquoi -4? Comme on sait la longueur à supprimer, 1 pour le signe moins, et que l'on veut garder le reste de readStringLivraison, il faut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readStringLivraison = readStringLivraison.substring(1);
    Cordialement
    jpbbricole

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Bonjour jpbbricole,

    Je dois effectivement supprimer le signe moins. Je viens d'essayer et ça me donne le même résultat... que faire?

    Nom : f0be2570351bb66bec15a8a16c4e10bfd76ae9c0.png
Affichages : 537
Taille : 161,7 Ko

    Merci pour ta réponse rapide.

  4. #4
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour zkimi

    Fais ce petit ajout pour voire ce qui se passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         if (e == '+') {
          Serial.println(readStringLivraison);
          readStringLivraison = readStringLivraison.substring(1);
          int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
          Serial.println("valeur de la livraison:");
          Serial.println(resultatLivraison);
    Cordialement
    jpbbricole

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    J'ai fais l'ajout en dessous de la première ligne car sinon la variable n'était pas définie.
    Ca n'a pas changé grand chose, les valeurs sont toujours "coupées"...

    Nom : a6c9b5af86b1cbcc2545c4e682b6e56d4a797f07.png
Affichages : 516
Taille : 152,8 Ko

    J'ai remarqué qu'en ajoutant un delay, je ne recevais plus les valeurs.

    Merci encore pour ton aide

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    J'espère ne pas avoir lu trop vite.... .
    Si je puis me permettre, pourquoi chercher à réaliser des "opérations" mathématique du string, surtout qu'après tu convertis ta valeur en mot "int".
    Je te propose cette séquence :
    • convertis en int ta string
    • fais tes opérations, ici récupérer la valeur absolue, ou multiplier par -1 si <0.
    • Créer ta chaîne de sortie, formatée pour afficher ton int.



    Au fait sinon pour éviter de passer tout le temps à la ligne du dessous quand tu affiches ton message, tu peux ajouter à ta chaînes le retour chariot : "\r". Pour éviter après ça un effacement, soit tu utilises des escapes séquence VT100 (ou une lib "terminal" arduino si ça existe), soit tu faits une chaîne formatée qui effacera forcément la précédente (ex : afficher ton int paddé sur 4 caractères).

  7. #7
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    J'ai lu un peu mieux ton code mais franchement je suis très étonnée de voir ce genre de code :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    void getLivraison()
    {
        if (Serial.available())  
    	{
    		char e = Serial.read();  //gets one byte from serial buffer
    		if (e == '+') {
    		  readStringLivraison = readStringLivraison.substring(-4, 0);
    		  int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
    		  Serial.println("valeur de la livraison:");
    		  Serial.println(resultatLivraison);
    		  if (resultatLivraison == 300){
    			old_valeur_livraison = "3";
    		  }
    		  if (resultatLivraison == 304){
    			old_valeur_livraison = "4";
    		  }
    		  readStringLivraison=""; //clears variable for new input    
    		}
    		else {    
    		  readStringLivraison += e; //makes the string readString
    		}
      }
     
    }

    C'est le code que tu as partagé, mais son fonctionnement est le même pour le '-' .

    Tu considères que quand tu reçois le signe, tu as terminé la réception de la chaine précédente et tu la traites.... C'est quand même bizarre puisque tu dis que "parfois" tu reçois ce caractère.
    Ensuite tu fais une substring de -4, mais il faudrait être sur que tu as bien reçu ta chaine d'une longeur suffisante ==> c'est quand même lié au premier point.
    Enfin je ne sais pas pourquoi tu cherches à filtrer puisque dans ce code tu filtre déjà le caractère, puisque tu ne l'ajoutes pas.

    Enfin je crois que tu utilises mal ta fonction substring :
    Caution: make sure your index values are within the String's length or you'll get unpredictable results.
    Tu utilises un index négatif donc bon....


    Mais je crois surtout que tu dois d'abord définir COMMENT tu synchronises la réception de ta chaine : je ne vois aucun STOF, EOF, ni de timeout.
    Si tu veux faire simple voilà un exemple de séquence si les envoies sont cadencés et tu ne fais que de la réception :
    • tu définis un STOF, un caractère non imprimable ou jamais utilisé : mettons 0x55
    • tu définies un EOF de la même manière.


    Au début tu attends d'avoir un STOF, si différent tu poubellises.
    Ensuit tu stockes chaque caractère, en filtrant (ie tu ne stocke pas si c'est un '-')
    jusqu'à la réception du EOF tu traites ton message.

    Si pendant la réception tu reçois un STOF, tu recommences du début (permet un resynchronisation).
    Voilà.

  8. #8
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour zkimi

    Le but n'était pas de modifier quelque chose mais de voire avant et après la fonction substring

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        if (e == '-') {
          Serial.println(readStringLivraison);
          readStringLivraison = readStringLivraison.substring(1);
          Serial.println(readStringLivraison);
         int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
          Serial.println("valeur de la livraison:");
    Essaies avec ces 2 ajouts pour voire avant et après.

    Bonjour bizulk
    Citation Envoyé par bizulk Voir le message
    Je te propose cette séquence :
    • convertis en int ta string
    • fais tes opérations, ici récupérer la valeur absolue, ou multiplier par -1 si <0.
    • Créer ta chaîne de sortie, formatée pour afficher ton int.
    Tu as tout à fait raison, mais, dans cet exemple il y avait opportunité de voire le traitement de chaînes de caractères, chose importante dans le cas de transmission de données.

    Je viens de voire que tu as changé
    if (e == '+')
    en
    if (e == '-')

    Ce qui veut dire que le signe - ne fait plus partie de ta chaîne readStringLivraison donc la fonction
    readStringLivraison = readStringLivraison.substring(1);
    ne sert plus à rien.

    Cordialement
    jpbbricole

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Merci à vous deux pour vos réponses,

    J'ai utilisé la fonction substring que j'ai trouvé sur internet seulement pour virer le caractère "-". Je crois que je me suis mal expliqué, il faut savoir que ce code permet de gérer un site internet et je reçois différentes valeurs, certains pour m'indiquer un état de livraison et d'autre pour l'état de charge d'une batterie. J'ai souhaité les différencier grâce à deux préfixes, + et -. Cela ne veut pas pour autant dire que ces valeurs sont négatives ou positives. Je veux juste que mon code puisse interpréter les bonnes valeurs avec les bonnes consignes c'est pour cela que le code est le même dans getLivraison() que dans getCharge() seulement avec le signe qui change.

    Concernant ta réponse bizulk, je n'ai pas vraiment compris le système de STOF et EOF, je n'en ai jamais entendu parlé.

    jpbbricole je ne peux pas faire apparaître readStringLivraison car cette dernière n'a pas été définie avant le substring. Elle se déclare grave au substring.

    Merci encore

  10. #10
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir zkimi
    Citation Envoyé par zkimi Voir le message
    jpbbricole je ne peux pas faire apparaître readStringLivraison car cette dernière n'a pas été définie avant le substring. Elle se déclare grave au substring.
    Si je regarde ton code (valable aussi pour readStringCharge)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       if (e == '+') {
          readStringLivraison = readStringLivraison.substring(-4, 0);
          int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
    tu dis qu'elle se déclare au moment du substring, pour ce faire elle devrait être précédé d'un String, donc elle est déclarée "plus haut", le problème c'est que tu n'as pas publié tout ton programme.
    Partant de cette constatation, ma proposition pour debugger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        if (e == '-') {
          Serial.println(readStringLivraison);
          readStringLivraison = readStringLivraison.substring(1);
          Serial.println(readStringLivraison);
         int resultatLivraison = readStringLivraison.toInt(); // conversion string en int
          Serial.println("valeur de la livraison:");
    devrait fonctionner.

    Je réitère ma remarque précédente, avec la condition
    if (e == '-') ou if (e == '+')
    si la condition est vraie, on ne "passe" pas dans
    else {
    readStringLivraison += e; //makes the string readString
    }
    donc le + ou le - ne fait pas partie de la variable donc il n'est pas nécessaire de le suprimer avec le substring.

    Cordialement
    jpbbricole

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Bonsoir jpbbricole,

    Merci d'avoir pris le temps de détailler votre réponse, n'étant pas au lycée en ce moment même j'essayerai demain matin votre proposition et je vous tiendrais au courant en temps et en heure.

    Je vous souhaite une bonne soirée et à demain

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Bonjour jpbbricole,

    J'ai donc essayé avec et sans le substring, effectivement il n'est pas nécessaire. Mais même sans le substring, les valeurs continuent d'être pas transmises entièrement (voir encadré rouge sur la capture).

    Je précise qu'il ne peut pas y avoir un problème de transmission par xbee car les valeurs sont toutes affichées correctement dans le logiciel XCTU-NG mais mal interprétées par Arduino.

    Nom : f62d8ffe7155642d4fd26b41dcfc5dce0fcf68fd.png
Affichages : 505
Taille : 178,2 Ko

    Merci encore

  13. #13
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour zkimi

    Mets ton code en entier, en ligne.

    Cordialement
    jpbbricole

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
     
    /* CODE FONCTIONNANT SUR ARDUINO MEGA */
     
    #include <SPI.h>
    #include <Ethernet.h>
    #include <Wire.h>
     
    byte mac[] = {
      0x90, 0xA2, 0xDA, 0x0F, 0xE9, 0x2E};   //physical mac address
    byte ip[] = {
      172, 16, 33, 65};                      // ip in lan (that's what you need to use in your browser. ("192.168.1.178")
     
    EthernetServer server(80);                             //server port
    String readString;
    String readStringCharge;
    String readStringLivraison;
    String valeur;
    String old_valeur_batterie;
    String old_valeur_livraison;
     
     
    void setup() {
      Ethernet.begin(mac, ip);
      server.begin();
      Serial.begin(9600);
      Serial.flush();
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());
    }
     
    void loop() {
      getCharge();
      /* while (Serial.available() > 0) {
       valeur = Serial.read();
       delay(5);
       if (valeur == "300") {
       old_valeur_livraison="3";
       }
       if (valeur == "304") {
       old_valeur_livraison="4";
       }
       Serial.println(valeur);
       valeur="";
       }*/
      getLivraison();
     
     
      // Create a client connection
      EthernetClient client = server.available();
      if (client) {
        while (client.connected()) {
          if (client.available()) {
            char c = client.read();
     
            //read char by char HTTP request
            if (readString.length() < 100) {
              //store characters to string
              readString += c;
              //  Serial.print(c);
            }
     
            //if HTTP request has ended
            if (c == '\n') {
              //Serial.println(readString); //print to serial monitor for debuging
     
              //client.println("HTTP/1.1 200 OK"); // Le site ne fonctionnait plus avec ces deux lignes sur Mozilla.
              //client.println("Content-Type: text/html");
              client.println("<HTML>");
              client.println("<HEAD>");
              client.println("<meta charset='utf8'/>");
              client.println("<link rel='stylesheet' type='text/css' href='https://extremservers.000webhostapp.com/style.css' />");
              client.println("<link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.7.0/css/all.css' integrity='sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ' crossorigin='anonymous'>");
              client.println("<TITLE>Tableau de contrôle des drones</TITLE>");
              client.println("</HEAD>");
              client.println("<BODY>");
              client.println("<H1>Tableau de contrôle des drones</H1>");
              client.println("<br />");
              client.println("<div id='box'>");
              client.println("<table class='tg'><tr>");
              client.println("<th class='tg-uqo3' colspan='6' style='font-size:20px'>Liste des drones</th>");
              client.println("</tr><tr>");
              client.println("<td class='tg-buh4'><i class='fas fa-hashtag'></i>&nbsp;Numéro</td>");
              client.println("<td class='tg-buh4'><i class='fas fa-battery-three-quarters'></i>&nbsp;Statut de la batterie</td>");
              client.println("<td class='tg-buh4'><i class='fas fa-box-open'></i>&nbsp;Statut de la livraison</td>");
              client.println("<td class='tg-buh4'><i class='fas fa-map-marker-alt'></i>&nbsp;Localisation de la base</td>");
              client.println("<td class='tg-buh4'><i class='fas fa-user-cog'></i>&nbsp;Actions</td></tr><tr>");
              client.println("<td class='tg-0lax'><p style='font-size:20px;'>1</p></td>");
              client.println("<td class='tg-0lax'>");
     
              if(old_valeur_batterie == "0"){
                client.println("<div id='rond' style='background-color:#00cc03;'></div><p style='font-size:14px;'><b><i class='fas fa-check-circle'></i>&nbsp;Chargé à ");
                client.println(readStringCharge);
                client.println("%</b></p>");
              }
              if(old_valeur_batterie == "1"){
                client.println("<div id='rond' style='background-color:#ffcc00;'></div><p style='font-size:14px;'><b>Chargé à "); 
                client.println(readStringCharge);
                client.println("%</b></p>");
              }
              if(old_valeur_batterie == "2"){
                client.println("<div id='rond' style='background-color:#cc0000;'></div><p style='font-size:14px;'><b>Chargé à "); 
                client.println(readStringCharge);
                client.println("%</b></p>");
              }
              if(old_valeur_batterie == ""){
                client.println("<div id='rond' style='background-color:#c4c4c4;'></div><p style='font-size:14px;'><b><i class='fas fa-question-circle'></i>&nbsp;Aucune donnée</b></p>");
              } 
              client.println("</td>");
     
              client.println("<td class='tg-lqy6'>");
     
              if(old_valeur_livraison == "3"){
                client.println("<div id='rond' style='background-color:#00cc03;'></div><p style='font-size:14px;'><b><i class='fas fa-check-circle'></i>&nbsp;Colis livré</b></p>"); 
              }
              if(old_valeur_livraison == "" || old_valeur_livraison=="4"){
                client.println("<div id='rond' style='background-color:#cc0000;'></div><p style='font-size:14px;'><b><i class='fas fa-times-circle'></i>&nbsp;Non livré</b></p>"); 
              }
     
              client.println("</td>");
              client.println("<td class='tg-lqy6'><a href='https://goo.gl/maps/YQrYDVP7LNP2' target='_blank' style='color:#000'>48.957993, 2.864817</a><p style='font-size:14px;'>(Coordonées GPS de la base)</p></td>");
              client.println("<td class='tg-lqy6'><a href=\"/?nouvellelivraison\"\" style='color:#000'>Remettre à zéro</a></td></tr><tr>");
              client.println("<td class='tg-buh4'><p style='font-size:20px;'>2</p></td>");
              client.println("<td class='tg-buh4'>-</td>");
              client.println("<td class='tg-p5oz'>-</td>");
              client.println("<td class='tg-p5oz'>-</td>");
              client.println("<td class='tg-p5oz'>-</td></tr><tr>");
              client.println("<td class='tg-0lax'><p style='font-size:20px;'>3</p></td>");
              client.println("<td class='tg-0lax'>-</td>");
              client.println("<td class='tg-lqy6'>-</td>");
              client.println("<td class='tg-lqy6'>-</td>");
              client.println("<td class='tg-lqy6'>-</td>");
              client.println("</table>");
     
     
              client.println("</div>");
              client.println("<br />");
              client.println("<h1>Lexique</h1>");
              client.println("<div id='box' style='width: 650px;'><center>");
              client.println("&nbsp;<div id='rond' style='background-color:#00cc03;' ></div> Opérations effectuées avec succès<br>");
              client.println("&nbsp;<div id='rond' style='background-color:#ffcc00;' ></div> Opérations en cours<br>");
              client.println("&nbsp;<div id='rond' style='background-color:#cc0000;' ></div> Opérations non effectuées<br>");
              client.println("&nbsp;<div id='rond' style='background-color:#c4c4c4;' ></div> Pas de données disponibles sur les opérations à venir</center>");
              client.println("<br>");
              client.println("</div>");
              client.println("</BODY>");
              client.println("</HTML>");
     
              delay(1);
              client.print("<meta http-equiv='refresh' content='1'>");
              //stopping client
              client.stop();
     
              if (readString.indexOf("?nouvellelivraison") >0){
                old_valeur_livraison = "";
              }
              readString="";  
            }
          }
        }
      }
    }
     
    void getCharge(){
     
      if (Serial.available())  {
        char d = Serial.read();  //gets one byte from serial buffer
        if (d == '-') {
          Serial.println(readStringCharge);
          /*readStringCharge = readStringCharge.substring(1);	
          int resultatCharge = readStringCharge.toInt(); // conversion string en int		
          Serial.println("valeur de la charge:");
          Serial.println(resultatCharge);
          if (resultatCharge >= 60 || resultatCharge == 100){
            old_valeur_batterie = "0";
          }
          if (resultatCharge < 60 && resultatCharge > 15){
            old_valeur_batterie = "1";
          }
          if (resultatCharge < 25){
            old_valeur_batterie = "2";
          } */
          readStringCharge=""; //clears variable for new input    
        } 
        else {     
          readStringCharge += d; //makes the string readString 
        }
     
    }
    }
     
    void getLivraison(){
     
        if (Serial.available())  {
        char e = Serial.read();  //gets one byte from serial buffer
        if (e == '+') {
          readStringLivraison = readStringLivraison.substring(1);	
          int resultatLivraison = readStringLivraison.toInt(); // conversion string en int		
          Serial.println("valeur de la livraison:");
          Serial.println(resultatLivraison);
          if (resultatLivraison == 300){
            old_valeur_livraison = "3";
          }
          if (resultatLivraison == 304){
            old_valeur_livraison = "4";
          }
          readStringLivraison=""; //clears variable for new input     
        } 
        else {     
          readStringLivraison += e; //makes the string readString
        }
      }
     
    }
    Merci

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Problème résolu, en effectuant quelques recherches je suis parvenu à obtenir mes valeurs entières grâce à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String readStringCharge = Serial.readStringUntil('\n');
    Celà donne:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void getCharge(){
     
      if (Serial.available())  {
        char d = Serial.read();  //gets one byte from serial buffer
        if (d == '-') {
          String readStringCharge = Serial.readStringUntil('\n');
          Serial.println("valeur de la charge:");
          Serial.println(readStringCharge);
          int resultatCharge = readStringCharge.toInt(); // conversion string en int  
          if (resultatCharge >= 60 || resultatCharge == 100){
            old_valeur_batterie = "0";
          }
          if (resultatCharge < 60 && resultatCharge > 15){
            old_valeur_batterie = "1";
          }
          if (resultatCharge < 25){
            old_valeur_batterie = "2";
          } 
          readStringCharge=""; //clears variable for new input    
        } 
        else {     
          readStringCharge += d; //makes the string readString 
        }
     
    }
    }
    Merci encore à vous

  16. #16
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Super !
    Bonne continuation.

    Cordialement
    jpbbricole

  17. #17
    Membre éclairé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Par défaut
    Tu as effectivement un moyen de synchroniser tes réceptions :
    • Ton caractère +/- sert de début de trame. (Start Of Frame).
    • "\n" de fin de trame. (Start Of Frame).

    Je vais passer les problèmes que tu peux avoir car sur le principe ça fonctionne.

    Par contre un détail, ces lignes servent à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        else {     
          readStringCharge += d; //makes the string readString 
        }
    Pour plusieurs raisons :
    • le fait que tu remplisses directement ta chaîne avec avec le contenu du buffer série (readStringUntil) te dispense de stocker les caractères reçus.
    • tu écrases tout ce que tu aurais déjà avec l'affectation avec le retour de readStringUntil().
    • Mais surtout c'est une variable locale : tout est effacé à la sortie de la fonction.


    Il faut que tu comprennes ce dernier point, sinon tu auras des problèmes dans tes futurs devs.
    Bonne continuation.

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 9
    Par défaut
    Bonjour bizulk,

    Merci pour cette réponse bien détaillée, c'est très gentil à toi d'expliquer ce pourquoi ce morceau de code est inutile, je m'en souviendrai pour mes futurs projets

    Bonne journée !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2015, 03h29
  2. Réponses: 4
    Dernier message: 23/04/2008, 17h03
  3. Réponses: 5
    Dernier message: 12/01/2007, 21h40
  4. Changement de valeur dans différents formulaires
    Par dragonfly dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/05/2006, 10h21
  5. Envoyer des valeurs vers le port série
    Par aliwassem dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2005, 20h05

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