J'ai besoin d'une petite explication sur ce code ;)

Bonjour tous le monde,

Cette fois c'est moi qui demande :

Je poste ici un bout de code qui n'est pas de moi c'est sans doute pour sa que je ne comprend pas un petit morceau.

i s'agit de void ProcessSMS (String sms)

si je comprend bien dans le String sms j'y retrouve le message.

Mais plus bas on fait un test du message via sms.indexOf ("on") >= 0

Et la je bug car si mon message contient par exemple Lapon la condition est remplie !!!
par contre je désire que se soi absolument égale !!!

Donc je fait if( sms == "on" ) et c'est la que c'est étrange car si mon message est "on" et bien la condition ne se remplis pas !!!!

void ProcessSms( String sms ){
  sms.toLowerCase();
  Serial.print( "ProcessSms for [" );
  Serial.print( sms );
  Serial.println( "]" );

  if( sms.indexOf("on") >= 0 ){
    digitalWrite( ledPin, HIGH );
    Serial.println( "LED IS ON" );
    return;
  }
  if( sms.indexOf("off") >= 0 ){
    digitalWrite( ledPin, LOW );
    Serial.println( "LED IS OFF" );
    return;
  } else {
    mySerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
    delay(1000);
    mySerial.print("AT+CMGS=\"");
    mySerial.print(snFull);
    mySerial.print("\"\r");
    delay(1000);
    mySerial.print("Unknown Command: ");
    mySerial.print(sms);
    mySerial.print("\r");
    delay(1000);
    mySerial.write(0x1A);  //Equivalent to sending Ctrl+Z     
    return;
  }
}

// FR: Demande d'utiliser le mode Text pour la gestion des messages
void GprsTextModeSMS(){
  mySerial.println( "AT+CMGF=1" );
}

Quelqu’un peut m'explique où je déconne ????

bonjour,
pour éviter ca, tu peux ajouter un caractère sans le sms et l'inclure dans la recherche en mettant en majuscule.
!ON
!OFF

Merci Infobarquee,

J'y avais pensé aussi mais voila pourquoi je veut que se soit absolument égal :

pourquoi devrais je refaire la roue alors quelle existe et même mieux que je ne pourrais faire:

Le code fait partie de ce lien embedded - Sending/Receiving SMS via Arduino - Stack Overflow

Ce code est vraiment bien !!

Mais je désir l’intégrer a un système d'alarme et donc le message serais plus complexe que "on" ou "!on"

Je désir peut être faire un rollingcode ou quelque chose du genre en sms !!!

Mais la n'est pas le soucie

Je n'arrive pas a comprendre pourquoi lorsque je met if est absolument égal a XX la condition ne se remplis pas alors que si c'est if sms index est sup a 0 donc il trouve XX dans le sms la sa répond a la condition !!!!

Il y a un truc qui m' échappe.
j'ai crus que c'etais sms.toLowerCase(); qui fessait autre chose que mettre en minuscule

J'ai crus que dans la String ce cachais un "\n" ou "\r"

Mais non !!!!

Donc ou j'ai louper qq chose et on me confirme que sa devrais fonctionner ou alors je ne comprend pas pourquoi sa ne fonctionne pas !!

indexOf renvoie une valeur -1 si non trouvé et >=0 si trouvé

oui sa j'ai bien compris.

il teste le contenus de String sms !

Mais moi je veux faire un absolument égal pour remplir la condition pas " si dans sms se trouve XX " !!

Donc pourquoi si je remplace :

if( sms.indexOf("on") >= 0 )

par

if ( sms == "on" ) la condition ne se remplis pas ?????

vraiment un truc m'échappe !!!

Dans la doc de la librairie String il est dit que les variables de part et d'autre de == doivent être de type String. ce qui n'est pas le cas dans ton test, "on" est un tableau de char.
.indexOf() est plus tolérant dans le type des variables attendues. Donc tu pourrais utiliser indexOf() et tester que la valeur retournée est 0 indiquant que "on" se trouve bien au début de la chaîne. Si tu veux blinder ton test il faut aussi tester la longueur pour t'assurer que "on" ne commence pas un mot plus long.

Merci fdufnews ;

La je comprend mieux me reste a convertir mon "on" en par examble :

String test = "on";

if( sms == test )

cela devrais donc fonctionner !!!!

Bonjour,

if (sms=="on") doit fonctionner.
Si ça ne fonctionne pas c'est qu'il y a d'autres caractères dans sms.