Go Down

Topic: Comparer string (Read 964 times) previous topic - next topic

alb12

Bonjour,
Je souhaiterais comparer deux chaines pour cela j'effectue cela:

Code: [Select]

String  inData="";
         if (Serial.available() > 0) {
             int h=Serial.available();   
       
    for (int i=0;i<h;i++){
                 inData += (char)Serial.read();
             }
   if (String(inData) == "this") {
    Serial.println("StringOne == \"this\"");
  }
        }


Mais cela ne fonctionne pas, quelqu'un aurait une solution?
Par la suite je souhaiterais pouvoir spliter une chaine par exemple "allume la radio : on"  recuperer ce qu'il y a devant et derriere les ":".
Merci d'avance

Bernardino

Bonjour,

tu peux essayer quelque chose du style ;

Code: [Select]
if (inData.equals("this")) {
...
}


skywodd

Bonjour,

N'utilise pas String, utilise un simple tableau de char.
Traite un char à la fois, tu test, si == ':' tu regardes le contenu du tableau avec strcmp(), sinon tu le stocke dans le tableau et tu incrémentes une variable d'index.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

alb12

Apres plusieurs tentative, je n'ai pas réussi à comparer correctement mes deux chaines.
quelqu'un pourrait-il m'aider?
merci d'avance

fdufnews

Quote
Apres plusieurs tentative

Quelles tentatives.
Bernardino t'avais proposé une solution.

Maintenant est-ce que le problème c'est la comparaison de chaines ou est-ce autre chose?
Parce que le bout de code que tu montres donnes à penser que tu ne gères peut être pas bien la réception de ta chaine.
As-tu fait imprimer la chaine reçue pour voir si tu stockes et compares bien la chaine complète?

En plus comme le fait remarquer skywodd il faut se méfier de String qui n'est pas très économe en ressources et peut jouer des tours en bouffant ta mémoire.

alb12

Bonjour,
voilà ce que j'ai essayé:

Code: [Select]

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
if (inputString == "this")
{
Serial.println(inputString);
}
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

alb12

Personne n'a de solution?

fdufnews

Voir là: http://arduino.cc/en/Tutorial/StringComparisonOperators
et là : http://arduino.cc/en/Reference/StringObject

La petite phrase suivante, extraite du lien ci-dessus, peut expliquer ton problème:
Quote
Note that constant strings, specified in "double quotes" are treated as char arrays, not instances of the String class

Les chaines entre quotes ne sont pas considérées comme des instances de String, donc la comparaison ne fonctionne pas.
== ou .equals ne fonctionnent qu'avec des instances de String voir l'exemple cité au début de ma réponse.

Go Up