[Résolu] Chaines en Arduino

Les cartes Arduino, les platines

[Résolu] Chaines en Arduino

Message non lude Faiseurdepluie » Dim 25 Nov 2012 11:47

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
Faiseurdepluie
 
Messages: 3
Inscription: Dim 25 Nov 2012 11:37

Re: Chaines en Arduino

Message non lude phil » Dim 25 Nov 2012 15:04

all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Chaines en Arduino

Message non lude Faiseurdepluie » Dim 25 Nov 2012 17:44

Merci, mais ça marche pas plus... :(
Faiseurdepluie
 
Messages: 3
Inscription: Dim 25 Nov 2012 11:37

Re: Chaines en Arduino

Message non lude Bemolu » Dim 25 Nov 2012 21:49

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 3577 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'
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Chaines en Arduino

Message non lude Faiseurdepluie » Dim 25 Nov 2012 22:02

Super, merci beaucoup! je finissais par désespérer de trouver la source du bug :)
Faiseurdepluie
 
Messages: 3
Inscription: Dim 25 Nov 2012 11:37


Retourner vers Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron