Page 1 sur 1

[Résolu] Chaines en Arduino

Message non luPosté: Dim 25 Nov 2012 11:47
de Faiseurdepluie
Bonjour,
j'ai un problème avec les comparaisons de chaines sous arduino. Ci-dessous mon sketch avec uniquement le passage qui me pose problème:

Code: Tout sélectionner
#include <Wire.h>
#include <snootor.h>
#include <stdlib.h>

String inputString = ""; 
int incomingByte = 0;
boolean stringComplete= false;
String commande = "Stop";

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

}

void loop(){
   if (stringComplete) {
    Serial.println(inputString);
    if(commande=="Pas"){
      Serial.println("ok");
    }
    else {
      Serial.println("ko");
    }
     
    // clear the string:
    if(inputString!=""){
      commande=inputString;
    }   
    inputString = "";
    stringComplete = false;
  }

  delay(20);
}

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

  }
}


lorsque je rentre Pas% à la console (mon indicateur de fin de chaine étant '%' ), je reçois toujours ko et jamais ok (je le rentre plusieurs fois pour que commande soit bien égal à "Pas" au début du premier if).
est ce que quelqu'un aurait une idée d'où vient le problème?

Merci de votre aide

Faiseurdepluie

Re: Chaines en Arduino

Message non luPosté: Dim 25 Nov 2012 15:04
de phil

Re: Chaines en Arduino

Message non luPosté: Dim 25 Nov 2012 17:44
de Faiseurdepluie
Merci, mais ça marche pas plus... :(

Re: Chaines en Arduino

Message non luPosté: Dim 25 Nov 2012 21:49
de Bemolu
Faiseurdepluie a écrit:lorsque je rentre Pas% à la console (mon indicateur de fin de chaine étant '%' ), je reçois toujours ko et jamais ok (je le rentre plusieurs fois pour que commande soit bien égal à "Pas" au début du premier if).
est ce que quelqu'un aurait une idée d'où vient le problème?


Si tu utilises la console Arduino IDE, passe en mode "No line ending" ou bien "New line". Tous les autres (Carriage return et both NL&CR) ne marchent pas avec ta logique. Cf image suivante, voir le mode en bas à droite, à côté de la vitesse.
Console_ARDUINO_IDE.gif
Attention au mode (en bas à droite): No line ending
Console_ARDUINO_IDE.gif (11.35 Kio) Vu 3962 fois


Chez moi, le résultat avec "Essai%" [SEND] "Essai%" [SEND] "Pas%" [SEND] "Pas%" [SEND] "Fin%" [SEND] "Fin%" [SEND] c'est bien ko ko ko ok ok ko (on réagit à l'avant dernière chaîne, pas à la dernière).
En effet SEND envoie la chaîne et ajoute quelque chose selon le mode:
  • No line ending: il n'ajoute rien
  • Newline: \n
  • Carriage return: \r (retour chariot, CR)
  • Both NL&CR: \n + \r
Du coup en rentrant "Pas%" dans un mode autre que "No line ending" ou "Newline", il envoie "Pas%\r" ce qui fait que la chaîne suivante commence par "\r", et ne peut jamais être égale à "Pas"
Newline marche car tu l'interceptes avec ton
Code: Tout sélectionner
&& inChar != '\n'

Re: Chaines en Arduino

Message non luPosté: Dim 25 Nov 2012 22:02
de Faiseurdepluie
Super, merci beaucoup! je finissais par désespérer de trouver la source du bug :)