Communication port série

Bonjour à tous,

Après un tas de recherches et de tests, je n'arrive pas à faire ce que je veux...
J'aimerais communiquer et interpréter les réponses d'un module en port série (un autre micro).

Voici mon code:

String data;
int portdispo, etat = 0;

void setup() {
  Serial.begin(115200);// put your setup code here, to run once:
etat = 1
}

void loop() {
  portdispo = Serial.available();
  while (portdispo > 0) {
    data = Serial.readStringUntil('\n');

switch (etat){
  case 1:
  
  if (data == "letsgo"){
    // envoi acquire
    if (data =="bien recu"){
      //on passe à l'étape
      etat = 2; 
    }else{
    etat = 1;
  }
    
  }
  break;

case 2:
  
}
  
}
  }

L'idée est que quand je reçois "letsgo", j'envoie une commande, s'il me repond "1" je peux continuer si "0" je repete :slight_smile:
Et j'ai 3 commandes à transmettre...

J'ai essayé un tas de strstr, strcmpy etc.. mais rien ne fonctionne....
J'ai fini par utiliser ce code:

const byte tailleMessageMax = 50;
char message[tailleMessageMax + 1]; // +1 car on doit avoir un caractère de fin de chaîne en C, le '\0'

const char marqueurDeFin = '#';

boolean ecouter()
{
  static byte indexMessage = 0; // static pour se souvenir de cette variable entre 2 appels consécutifs. initialisée qu'une seule fois.
  boolean messageEnCours = true;

  while (Serial.available() && messageEnCours) {
    int c = Serial.read();
    if (c != -1) {
      switch (c) {
        case marqueurDeFin:
          message[indexMessage] = '\0'; // on termine la c-string
          indexMessage = 0; // on se remet au début pour la prochaine fois
          messageEnCours = false;
          break;
        default:
          if (indexMessage <= tailleMessageMax - 1) message[indexMessage++] = (char) c; // on stocke le caractère et on passe à la case suivante
          break;
      }
    }
  }
  return messageEnCours;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  
  if (! ecouter()) {
    if (!strcmp(message, "letsgo")) {
          
      
    } else {
      Serial.println(F("RAS"));
    }
  }
}

Mais une fois "letsgo#" reçu, je ne peux pas enchainer avec d'autres commandes...
Est-ce que vous auriez une idée s'il vous plaît ? Merci bien

Bonjour,

  portdispo = Serial.available();
  while (portdispo > 0) {
    data = Serial.readStringUntil('\n');

portdispo n'est pas rafraîchi dans la boucle while donc si on entre dans la while (avec portdispo>0), on n'en sort jamais.