Affectation des variables port serie

Bonjour,
je suis bloqué sur un truc pas de tous difficile, mais je suis pas trop basé sur Arduino,
ma question est comment je peux contrôler deux led au même temps avec la communication série:

  1. Le premier il allume quand il reçoit une chaîne "connecté" et éteint quand il reçoit "déconnecté"
  2. Le deuxième il allume quand il reçoit "on" et le premier reçoit"connecté" et éteint quand il reçoit "off" et le premier "connecté".

voila le code que j'ai utilisé mais il ne fonctionne pas correctement:

String message;
void setup() {
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);  
Serial.begin(9600);
} 
void loop() {
 while (Serial.available())
  { 
  delay(10); 
  char m = Serial.read();
message +=m;
  }
    
if (message.length() > 0)
  {
    Serial.println(message); 
       if(message == "connecté"  )
       {
         digitalWrite(12, HIGH);
         String voice; 
         while (Serial.available())
  { 
  delay(10); 
  char c = Serial.read();
voice +=c;
  }
  if (voice.length() > 0)
  {
    Serial.println(voice); 
       if(voice == "on"  )
       {
         digitalWrite(13, HIGH);
        }  
  if(voice == "off" )
  {
   digitalWrite(13, LOW);
    } 
voice="";
}      

        }  
  if(message == "deconnecté" )
  {
   digitalWrite(12, LOW);
    } 
message="";
}

}

MERCI pour vos aides !!!

Bonjour,

  • Mets ton code entre balises
  • évites d'utiliser des caractères accentués dans tes commandes à moins que tu sois sur que le codage utilisé par l'émetteur est le même que le codage du source (UTF8 dans l'IDE arduino)
  • dans ta loop effectue une seule lecture du message que tu compareras à 'connecte', 'deconnecte', 'on' et 'off'
  • accessoirement évites d'utiliser les String qui peuvent causer des problèmes de manque de mémoire.
  • dans ta loop effectue une seule lecture du message que tu compareras à 'connecte', 'deconnecte', 'on' et 'off':
    comment je peux effectuer les deux messages dans une seule variables: vous avez d'un exemple svp ?

comme ça par exemple:

void loop() {
  if (Serial.available())
  {
    message = Serial.readString();
    Serial.println(message);
    if (message == "connecte"  )
    {
      digitalWrite(12, HIGH);
    }
    if (message == "deconnecte" )
    {
      digitalWrite(12, LOW);
    }
    if (message == "on"  )
    {
      digitalWrite(13, HIGH);
    }
    if (message == "off" )
    {
      digitalWrite(13, LOW);
    }
  }
}

J'ai utilisé un String comme tu l'avais fait, mais il vaut mieux éviter.

Merci mon frère mais malheureusement ça marche pas car je doit récupérer 2 variables !!!

pour quoi faire ?????

jemi999:
ma question est comment je peux contrôler deux led au même temps avec la communication série:

  1. Le premier il allume quand il reçoit une chaîne "connecté" et éteint quand il reçoit "déconnecté"
  2. Le deuxième il allume quand il reçoit "on" et le premier reçoit"connecté" et éteint quand il reçoit "off" et le premier "connecté".

Qu'est ce qu'on fait quand on n'est pas connecté?

c'est résolu :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
voila comment j'ai fais:

String voice; 
void setup() {
pinMode(13, OUTPUT);  
pinMode(12, OUTPUT);
Serial.begin(9600);
} 
void loop() {
  while (Serial.available())
  { 
  delay(10); 
  char c = Serial.read();
  
  voice += c; 
  }
  if (voice.length() > 0)
  {
    //Serial.println(voice); 
       if(voice == "oui"  )
       {
         digitalWrite(13, HIGH);
         digitalWrite(12, LOW);
         Serial.println("Vous etes connecté et led eteint"); 
        }  
if(voice == "on"  )
       {
         digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  Serial.println("Vous etes connecté et led allumé");
        }
if(voice == "off"  )
       {
         digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  Serial.println("Vous etes connecté et led eteint");
        }
  if(voice == "non" )
  {
   digitalWrite(13, LOW);
digitalWrite(12, LOW);
Serial.println("Vous etes dconnecté et led eteint");
    } 
voice="";
}
}

MERCI Beaucoup pour vos réactions