Pb Get HTTP aléatoire

Bonjour à tous,
je suis nouveau sur le forum et j'ai un soucis avec mon code ,
j'utilise 4 client sur le même arduino pour faire des requetes http dans un serveur.
le code fonctionne parfaitement avec un seul client .Le problème est que j'ai parfois des envoi qui ne se font pas mais je ne sais pas pourquoi , j'ai ajouté des tempos pour laisser le temps au codes d'envoyer les requetes mais rien n'y fait.
Quelqu'un peut-il jeter un oeil si j'ai fait une mauvaise manipulation.
if(digitalRead(CPDBP4) == 1 && B4DETECTE == 0 && JETON == 0) {
// Detection du Capteur Bacs Poste 4
B4DETECTE =1;
STATUT_POSTE_4 = 0;
message4 = 1;
JETON = 1;

          CLIENT4_CONNECTE();

delayMicroseconds(200);

          client4.print("GET /LECTURE_REGISTRE_POSTE_4.php HTTP/1.1\r\n"); //attention, pas de saut de ligne !
          client4.println("Host: " + String(serveur));
          client4.print("\r\n");
          client4.flush();

delayMicroseconds(200);

        static char cmdBuffer4[CMDBUFFER_SIZE] = "";
        char c;
        
        CLIENT4_CONNECTE();

delayMicroseconds(200);

          while ( client4.connected()){
            if ( client4.available() ) {
           
                      // Script qui fonctionne si le nombre de caractere == 24 sinon changer CMDBUFFER_SIZE
                       c = processCharInput(cmdBuffer4, client4.read());
                      
                      if (c == '\r' || c == '\n'){
                       
                         if (strcmp("REG_POSTE_4_VALEUR_10XXX", cmdBuffer4) == 0) 
                         {
                          STATUT_POSTE_4 = 1;
                          message4 = 0;
                          break;
                         }

                         if (strcmp("REG_POSTE_4_VALEUR_00XXX", cmdBuffer4) == 0) 
                         {
                          STATUT_POSTE_4 = 0;
                          message4 = 0;
                          break;
                         }
                          cmdBuffer4[0] = 0;
                          c = '0';
                          delayMicroseconds(200); 

                      }
               }

          } 

cmdBuffer4[0] = 0;
JETON = 0;
client4.stop();
delayMicroseconds(200);
}

STP édite ton message afin que le code soit lisible, au passage formate le dans l'IDE (CTRL T) avant de le poster.

Et précise ton matériel afin qu'on sache comment t'aider.

Merci pour le conseil , voici le code complet.
J'utilise un Arduino Mega

void loop() {

// Code Principal

// #### Gestion Des capteurs de detection des Bacs
if (digitalRead(CPDBP1) == 1 && B1DETECTE == 0 && JETON == 0) {
// Detection du Capteur Bacs Poste 1
B1DETECTE = 1;
STATUT_POSTE_1 = 0;
message1 = 1;
JETON = 1;
CLIENT1_CONNECTE();

delayMicroseconds(200);

client1.print("GET /LECTURE_REGISTRE_POSTE_1.php HTTP/1.1\r\n"); //attention, pas de saut de ligne !
client1.println("Host: " + String(serveur));
client1.print("\r\n");
client1.flush();

delayMicroseconds(200);

static char cmdBuffer1[CMDBUFFER_SIZE] = "";
char c;

CLIENT1_CONNECTE();
delayMicroseconds(200);

while ( client1.connected()) {

  if ( client1.available()) {

    // Script qui fonctionne si le nombre de caractere == 24 sinon changer CMDBUFFER_SIZE
    c = processCharInput(cmdBuffer1, client1.read());

    if (c == '\r' || c == '\n') {

      if (strcmp("REG_POSTE_1_VALEUR_10XXX", cmdBuffer1) == 0)
      {
        STATUT_POSTE_1 = 1;
        message1 = 0;
        break;
      }

      if (strcmp("REG_POSTE_1_VALEUR_00XXX", cmdBuffer1) == 0)
      {
        STATUT_POSTE_1 = 0;
        message1 = 0;
        break;
      }
      cmdBuffer1[0] = 0;
      c = '0';
      delayMicroseconds(200);
    }

  }
}
cmdBuffer1[0] = 0;
JETON = 0;
client1.stop();
delayMicroseconds(200);

}

if (digitalRead(CPDBP1) == 0 && B1DETECTE == 1) {
// Detection de Fin de Capteur Bacs Poste 1

if (STATUT_POSTE_1 == 1) {
  digitalWrite(RLVS1, HIGH);
  STATUT_POSTE_1 = 0;
  ETATVERRIN_1 = 0;
}
B1DETECTE = 0;

}

if (digitalRead(CPDBP2) == 1 && B2DETECTE == 0 && JETON == 0) {
// Detection du Capteur Bacs Poste 2
B2DETECTE = 1;
STATUT_POSTE_2 = 0;
message2 = 1;
JETON = 1;
//Serial.println("ENVOI POSTE2");

CLIENT2_CONNECTE();

delayMicroseconds(200);

client2.print("GET /LECTURE_REGISTRE_POSTE_2.php HTTP/1.1\r\n"); //attention, pas de saut de ligne !
client2.println("Host: " + String(serveur));
client2.print("\r\n");
client2.flush();

delayMicroseconds(200);

char cmdBuffer2[CMDBUFFER_SIZE] = "";
char c;

CLIENT2_CONNECTE();

delayMicroseconds(200);

while ( client2.connected()) {


  if ( client2.available() ) {

    // Script qui fonctionne si le nombre de caractere == 24 sinon changer CMDBUFFER_SIZE
    c = processCharInput(cmdBuffer2, client2.read());

    if (c == '\r' || c == '\n') {

      if (strcmp("REG_POSTE_2_VALEUR_10XXX", cmdBuffer2) == 0)
      {
        STATUT_POSTE_2 = 1;
        message2 = 0;
        break;
      }

      if (strcmp("REG_POSTE_2_VALEUR_00XXX", cmdBuffer2) == 0)
      {
        //                            Serial.println("REPONSE POSTE2");
        STATUT_POSTE_2 = 0;
        message2 = 0;
        break;
      }
      cmdBuffer2[0] = 0;
      c = '0';
      delayMicroseconds(200);
    }

  }

}
cmdBuffer2[0] = 0;
JETON = 0;
client2.stop();
delayMicroseconds(200);

}

if (digitalRead(CPDBP2) == 0 && B2DETECTE == 1) {
// Detection de Fin de Capteur Bacs Poste 2

if (STATUT_POSTE_2 == 1) {
  digitalWrite(RLVS2, HIGH);
  STATUT_POSTE_2 = 0;
  ETATVERRIN_2 = 0;
}
B2DETECTE = 0;

}

if (digitalRead(CPDBP3) == 1 && B3DETECTE == 0 && JETON == 0) {
// Detection du Capteur Bacs Poste 3
// Serial.println("Detection BAC P3");
B3DETECTE = 1;
STATUT_POSTE_3 = 0;
message3 = 1;
JETON = 1;
//Serial.println("CONN POSTE3");

CLIENT3_CONNECTE();
delayMicroseconds(200);

//Serial.println("ENVOI POSTE3");

client3.print("GET /LECTURE_REGISTRE_POSTE_3.php HTTP/1.1\r\n"); //attention, pas de saut de ligne !
client3.println("Host: " + String(serveur));
client3.print("\r\n");
client3.flush();

delayMicroseconds(200);

//Serial.println("DONNEES ENVOYEES");
char cmdBuffer3[CMDBUFFER_SIZE] = "";
char c;

CLIENT3_CONNECTE();

delayMicroseconds(200);

while ( client3.connected()) {
  if ( client3.available() ) {

    // Script qui fonctionne si le nombre de caractere == 24 sinon changer CMDBUFFER_SIZE
    c = processCharInput(cmdBuffer3, client3.read());

    if (c == '\r' || c == '\n') {
      //Serial.println(cmdBuffer3);
      if (strcmp("REG_POSTE_3_VALEUR_10XXX", cmdBuffer3) == 0)
      {
        STATUT_POSTE_3 = 1;
        message3 = 0;
        break;
      }

      if (strcmp("REG_POSTE_3_VALEUR_00XXX", cmdBuffer3) == 0)
      {
        //                            Serial.println("RETOUR POSTE3");
        STATUT_POSTE_3 = 0;
        message3 = 0;
        break;
      }
      cmdBuffer3[0] = 0;
      c = '0';
      delayMicroseconds(200);
    }
  }

}
//            Serial.println("FIN GESTION BAC3 ");
cmdBuffer3[0] = 0;
JETON = 0;
client3.stop();
delayMicroseconds(200);

}

if (digitalRead(CPDBP3) == 0 && B3DETECTE == 1) {
// Detection de Fin de Capteur Bacs Poste 3

if (STATUT_POSTE_3 == 1) {
  digitalWrite(RLVS3, HIGH);
  STATUT_POSTE_3 = 0;
  ETATVERRIN_3 = 0;
}
B3DETECTE = 0;

}

if (digitalRead(CPDBP4) == 1 && B4DETECTE == 0 && JETON == 0) {
// Detection du Capteur Bacs Poste 4
B4DETECTE = 1;
STATUT_POSTE_4 = 0;
message4 = 1;
JETON = 1;

CLIENT4_CONNECTE();
delayMicroseconds(200);

client4.print("GET /LECTURE_REGISTRE_POSTE_4.php HTTP/1.1\r\n"); //attention, pas de saut de ligne !
client4.println("Host: " + String(serveur));
client4.print("\r\n");
client4.flush();

delayMicroseconds(200);

static char cmdBuffer4[CMDBUFFER_SIZE] = "";
char c;

CLIENT4_CONNECTE();

delayMicroseconds(200);

while ( client4.connected()) {
  if ( client4.available() ) {

    // Script qui fonctionne si le nombre de caractere == 24 sinon changer CMDBUFFER_SIZE
    c = processCharInput(cmdBuffer4, client4.read());

    if (c == '\r' || c == '\n') {

      if (strcmp("REG_POSTE_4_VALEUR_10XXX", cmdBuffer4) == 0)
      {
        STATUT_POSTE_4 = 1;
        message4 = 0;
        break;
      }

      if (strcmp("REG_POSTE_4_VALEUR_00XXX", cmdBuffer4) == 0)
      {
        STATUT_POSTE_4 = 0;
        message4 = 0;
        break;
      }
      cmdBuffer4[0] = 0;
      c = '0';
      delayMicroseconds(200);

    }
  }

}
cmdBuffer4[0] = 0;
JETON = 0;
client4.stop();
delayMicroseconds(200);

}

if (digitalRead(CPDBP4) == 0 && B4DETECTE == 1) {
// Detection de Fin de Capteur Bacs Poste 4

if (STATUT_POSTE_4 == 1) {
  digitalWrite(RLVS4, HIGH);
  STATUT_POSTE_4 = 0;
  ETATVERRIN_4 = 0;
}
B4DETECTE = 0;

}
}

Explication du fonctionnement :
j'ai une detection capteur , je rentre dans le IF et j'envoi une requete GET HTTP et j'attends la réponse , ensuite je passe au capteur suivant et ainsi de suite .
le problème est que parfois sans explication la requete GET HTTP ne se lance pas.
J'ai ajouté des tempo histoire de , c'est mieux mais pas encore parfait.
j'ai l'impression qu'il attends une réponse du serveur trop longtemps et du coup cela plante.

Quelle bibliothèque de gestion du protocole http ? J'ai eu un problème similaire et j'ai du réécrire une partie de la bibliothèque !

Bonjour,
j'utilise la bibliothèque standard <Ethernet.h>.
j'ai remarqué que si je n'ai qu'un seul capteur donc un seul client cela fonctionne.
Dès lors que j'ai au moins deux capteurs donc potentiellement deux requetes "GET" en même temps cela ne fonctionne pas.
j'essaye de faier les connexions à la suite mais toujours le même soucis.

En dépieutant cette bibliothèque je me suis rendu compte que l'envoi des données vers le serveur se faisait avec un "write". Cette fonction est spécifiée pour rendre le nombre d'octets envoyés, charge à l'application qui l'emploie de vérifier que si elle a voulu envoyer 100 octets le résultat est bien 100. Or dans la bibliothèque on ne fait rien du retour du write, ce qui signifie que le logiciel ne vérifie pas que le write s'est effectué correctement. J'ai donc reprogrammé cette partie là, en vérifiant si le write s'est bien déroulé, et si le nombre d'octets rendu par "write" est inférieur à celui que j'avais dans mon buffer, je reprends les caractères non envoyés pour attendre un tour (boucle loop) et renvoyer. Donc j'ai transformé cette bibliothèque un peu bestiale en une machine à états, et maintenant je n'ai plus de problème.

Merci cela semble prometteur , je vais regarder.