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 ![]()
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