Pages: [1]   Go Down
Author Topic: serial.print et char*  (Read 463 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonsoir les gens, j'ai un petit problème  smiley-eek


Je sais pas si c'est moi qui bug, ou si c'est normal, mais...

on ne peut pas serialprinter une chaine de caractère à la façon C ???
char *str = "ma chaine";

Code:
serial.print(str);


Ou on est obligé de faire une fonction qui affiche les char un par un ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je sais pas si c'est moi qui bug, ou si c'est normal, mais...

on ne peut pas serialprinter une chaine de caractère à la façon C ???

Code:
serial.print(str);
Bien sur que si qu'on peut ! O_o

Serial.print("Hello World");
=
char *str = "Hello World";
Serial.print(str);

Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, je dois être fatigué lol

je comprends pas ce qui fonctionne pas ici : (à savoir que quand je décommente //Serial.print(c); dans le IF, j'ai bien ce qu'il faut qui s'affiche

Code:
char val[20] = "";
  int nbrCar = 0;
  int d = false; //capture jusque '>'

  while(client.available())
  {
    char c = client.read();
    //Serial.print(c);

    if(c == '<') d = true;
    if(c == '>') d = false;

    if(d && c != '<')
    {
      val[++nbrCar] = c;
      //Serial.print(c);
    }

  }
  Serial.println(val);
« Last Edit: February 25, 2012, 02:37:11 pm by vohu » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Roooo !! Le vilain !

Une chaine de caractéres en c/c++ se termine toujours par \0 smiley-wink

Donc avant Serial.println(val);
val[++nbrCar] = '\0';

Ps: tu devrait check si nbrCar ne dépasse pas 20 sinon tu aurait un dépassement de tampon, et de gros soucis smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca marche pas non plus :s

sortie :

Quote
v0
o1
h2
u3
4


Code:
  //si connection OK
  char val[20] = "";
  int nbrCar = 0;
  int d = false; //capture jusque '>'

  while(client.available())
  {
    char c = client.read();
    //Serial.print(c);

    if(c == '<') d = true;
    if(c == '>') d = false;

    if(d && c != '<')
    {
      val[++nbrCar] = c;

      Serial.print(c);
      Serial.println(nbrCar -1,DEC);
    }

  }
  Serial.print(nbrCar,DEC);
  val[nbrCar] = '\0';
  Serial.println(val);


Pour la vérif de dépassement de la chaine je verai après
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon... j'ai résolu le problème en ne faisant pas l'incrémentation dans : val[++nbrCar] = c;

Visiblement, l'incrémentation se faisant avant, ce qui fait que mon val[0] valait '\0'  et mon premier char était enregistré dans val[1], d'ou la chaine vide


Faudra que je vérifie si i++ ou ++i sont équivalents dans l'environement arduino


« Last Edit: February 25, 2012, 02:56:13 pm by vohu » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon... j'ai résolu le problème en ne faisant pas l'incrémentation dans : val[++nbrCar] = c;

Visiblement, l'incrémentation se faisant avant, ce qui fait que mon val[0] valait '\0'  et mon premier char était enregistré dans val[1], d'ou la chaine vide
Logique vu que ++i incrémente i avant de faire la suite, contrairement à i++.
Effectivement je n'avais pas vu ton initialisation à "" au départ ...

Faudra que je vérifie si i++ ou ++i sont équivalents dans l'environement arduino
Damned! ++i et i++ ne sont pas du tout équivalent que ce soit avec l'ide arduino ou avec n'importe quelle compilateur c/c++ !

++i incrémente i avant de faire le reste du calcul.
ex:
i = 0;
test(++i); // -> test(1);

i++ incrémente i aprés avoir fait le reste du calcul.
ex:
i = 0;
test(i++); // test(0);
// -> i = 1
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yep ok smiley-grin

moi j'inversais ! Donc forcément, ça ne pouvait pas aller...

Je m'étais toujours mis en tête que ++i incrémentait après l'affectation


Le code juste pour si un jour quelqu'un tombe la dessus :

Code:
  char val[21] = "";
  int nbrCar = 0;
  int d = false; //capture jusque '>'

  while(client.available())
  {
    char c = client.read();
    if(c == '<') d = true;
    if(c == '>') d = false;

    if(d && c != '<' && nbrCar < 21)
    {
      val[nbrCar++] = c;
      val[nbrCar] = '\0';
    }


  }
  Serial.println(val);
« Last Edit: February 25, 2012, 03:07:59 pm by vohu » Logged

Pages: [1]   Go Up
Jump to: