Go Down

Topic: [RESOLU]problème avec la fonction charAt de l'objet String (Read 573 times) previous topic - next topic

f1apy

Jan 01, 2013, 07:29 pm Last Edit: Jan 02, 2013, 07:15 am by f1apy Reason: 1
Hello, bonne année à tous,

j'ai un problème avec le code suivant:

Code: [Select]

HardwareSerial Uart = HardwareSerial();
String message = "";
char recu;
unsigned int lng_msg;
String Mhz = "";
String Khz ="";
String Hz ="";
boolean ok = false;

void setup()
{
 delay(1000);
 Serial.begin(115200);
 Uart.begin(9600);
}

void loop() {
 
     
     while (Uart.available() > 0)
     {
     recu = (char)Uart.read();
     message += recu;
     }

     if ( message != "")
     {
     Serial.print(message);
     //traitement de message
     extrait();
     }
     //ici eventuellement blocage transmission via hard
     
     
     message ="";
            }
void extrait() {
 int k;
 int h;
 char let;
lng_msg = message.length() ;
if (lng_msg == 12) {  //message complet (pas de zéros)
for (int x = 1; x < 4 ; x++)  {
  Mhz += message.charAt(x);}
for (int x = 5; x < 9 ; x++)  {
  Khz += message.charAt(x);}
for (int x = 10; x < 13 ; x++)  {
  Hz += message.charAt(x);}
}//fin if
if (lng_msg < 12) { //va falloir chercher
  for (int x = 1; x < (lng_msg +1) ; x++)  {
    let = message.charAt(x);
    if (let == "K") {       //  [color=red]--> c'est ici que j'ai le problème[/color]
       k = x;
      }
     if (let == "H") {
       h = x;
      }
  } //fin for
  //on extrait :
  for (int x = 1; x < k ; x++)  {
  Mhz += message.charAt(x);}
for (int x = (k+1); x < h ; x++)  {
  Khz += message.charAt(x);}
for (int x = (h+1); x < (lng_msg+1) ; x++)  {
  Hz += message.charAt(x);}
}
}



le compilateur me donne l'eereur suivante:
sketch_rs232_v2:60: error: ISO C++ forbids comparison between pointer and integer
sketch_rs232_v2.ino:69: warning: comparison between signed and unsigned integer expressions


pourtant je pensais que la fonction charAt() renvoyait un char et non un pointeur  :smiley-sad-blue:
est-ce que quelqu'un pourrait m'aider sur ce coup la svp ?

il s'agit d'extraire plusieurs parties d'un message de longueur variable celle-ci n'étant pas connue à l'avance.
le message est de la forme : xxxKxxxHxxx avec xxx pouvant prendre la valeur de 0 à 999

merci
Cordialement,
Jacques

fdufnews

#1
Jan 01, 2013, 10:35 pm Last Edit: Jan 01, 2013, 10:44 pm by fdufnews Reason: 1
Code: [Select]
     let = message.charAt(x);
     if (let == "K") {       //  [color=red]--> c'est ici que j'ai le problème[/color]

let est un caractère alors que "K" est une chaîne de caractères.
Ce n'est pas la longueur de la variable qui dit si c'est un caractère ou une chaîne de caractères.
L'apostrophe double définit une chaîne de caractères.
Pour définir un caractère seul il faut utiliser l'apostrophe simple.

Il faudrait écrire:
Code: [Select]
     let = message.charAt(x);
     if (let == 'K') {     


Même chose pour le H de la ligne en dessous

Pour rechercher le "K" et le "H", tu pourrais aussi utiliser la méthode indexOf() qui te retourne directement la position d'une chaîne à l'intérieur d'une autre.
http://arduino.cc/en/Reference/StringIndexOf

f1apy

#2
Jan 02, 2013, 06:50 am Last Edit: Jan 02, 2013, 07:14 am by f1apy Reason: 1
Bonjour,

Merci beaucoup fdufnews,
je me mettrai des baffes, pourtant je connaissais cette particularité: simple quote = caractère et double quote = string,
j'avais juste oublié, pas toujours évident de jouer au ping pong entre un langage et un autre.

c'est promis j'oublierai plus, et merci également pour l'astuce de l' indexOF() , évidement ça simplifie.
Cordialement,
Jacques

Go Up