Pages: [1]   Go Down
Author Topic: [RESOLU]problème avec la fonction charAt de l'objet String  (Read 497 times)
0 Members and 1 Guest are viewing this topic.
SCY CHAZELLES
Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello, bonne année à tous,

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

Code:
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
« Last Edit: January 02, 2013, 01:15:12 am by f1apy » Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3421
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
     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:
     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
« Last Edit: January 01, 2013, 04:44:30 pm by fdufnews » Logged

SCY CHAZELLES
Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 02, 2013, 01:14:11 am by f1apy » Logged

Pages: [1]   Go Up
Jump to: