Pages: [1]   Go Down
Author Topic: concaténer une variable avec un nombre dans une boucle  (Read 921 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 17
Posts: 1967
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour tout le monde,
question de débutant de la loose, mais bon.
je cherche a rajouter dans une boucle le nombre de mon FOR à une variable, le truc basique en fait, mais qui me pose un gros problème.
en php, aucun soucis pour faire ce genre de chose, mais en c++, ben........

en résumant, je recois des variables via internet, je parse le tout et je renvois par RF les données séparées.
Quote
 
while (str = strtok_r(code, "-", &code)){
    variables = str;
         i++;
  }
    for(int ii=0;ii<i;ii++){
    Serial.println(variables[ii]);
}

  Serial.println(variables[0]);
  Serial.println(variables[1]);
  Serial.println(variables[2]);
  Serial.println(variables[3]);
  Serial.println(variables[4]);

char donnee1[5]="";
char donnee2[10]="";
char donnee3[10]="";
char donnee4[10]="";
char donnee5[10]="";
char donnee[20]="";

  strcat(donnee1, "A-");
  strcat(donnee1, variables[0]);
  Serial.println(donnee1);

  strcat(donnee2, "B-");   
  strcat(donnee2, variables[1]);
  strcat(donnee2, "-");   
  strcat(donnee2, variables[2]);
  Serial.println(donnee2);
 
  strcat(donnee3, "C-");     
  strcat(donnee3, variables[3]);
  strcat(donnee3, "-"); 
  strcat(donnee3, variables[4]);
  Serial.println(donnee3);
 
  strcat(donnee4, "D-");       
  strcat(donnee4, variables[5]);
  strcat(donnee4, "-"); 
  strcat(donnee4, variables[6]);
  Serial.println(donnee4);


jusque là, tout va bien, c'est maintenant que ca se complique
je veux dans une boucle afficher le "terme" donnee en rajoutant  1-2-3-4-5 afin d'avoir donnee1 donnee2 etc.. et qu'il me ressorte le contenu des variables de donnee1........donnee5
j'ai donc fais ceci, mais il m'affiche du n'importe nawak
Quote
   
 for (int compt=0;compt<6;compt++) {
Serial.println(donnee[compt]);
   Serial.println(compt);

    }
j'ai testé aussi avec strcat, mais niet.
merci d'avance
« Last Edit: September 18, 2012, 03:19:57 am by infobarquee » Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1967
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bon, je viens d'utiliser sprintf, ca me renvoi bien les mots désirés, mais pas les variables qu'ils contiennent.
Quote
    for (int compt=0;compt<6;compt++) {
sprintf(donnee, "%s%d", mot, compt);
Serial.println(donnee);

renvoi
Code:
donnee0
donnee1
donnee2
donnee3
donnee4
donnee5
au lieu de
Quote
A-0
B-255-60
C-199-60
D-124-60
E-99-60
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3646
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://arduino.cc/en/Reference/StringObject

?
Logged


France
Offline Offline
Sr. Member
****
Karma: 2
Posts: 380
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca y est ! je viens de comprendre.

Tu as déclaré des tableaux de char donnee1, donnee2, ....donnee5.

Si tu fais :

sprintf(donnee, "%s%d", mot, compt);
Serial.println(donnee);

le Serial.println(donnee) ne va JAMAIS afficher la valeur de la variable du programme ! On ne peut pas faire une évaluation de la sorte en C !

la solution la plus simple est d'utiliser un tableau de char à 2 dimension genre :


Code:

char donnee[6][20];

 strcat(donnee[1], "A-");
  strcat(donnee[1], variables[0]);
  Serial.println(donnee[1]);

  strcat(donnee[2], "B-");  
  strcat(donnee[2], variables[1]);
  strcat(donnee[2], "-");    
  strcat(donnee[2], variables[2]);
  Serial.println(donnee[2]);
  
  strcat(donnee[3], "C-");    
  strcat(donnee[3], variables[3]);
  strcat(donnee[3], "-");  
  strcat(donnee[3], variables[4]);
  Serial.println(donnee[3]);
  
  strcat(donnee[4], "D-");      
  strcat(donnee[4], variables[5]);
  strcat(donnee[4], "-");  
  strcat(donnee[4], variables[6]);
  Serial.println(donnee[4]);

et après tu auras :

Code:

for (int compt=0;compt<6;compt++)
{
  sprintf(donnee, "%s%d", mot, compt);
  Serial.println(donnee[i]);
}

Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1967
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

merci pour le tuyau, mais ca me sort une erreur
Quote
ACCESSRECEIVE2.cpp:203: erreur: cannot convert ‘char (*)[20]’ to ‘char*’ for argument ‘1’ to ‘int sprintf(char*, const char*, ...)’
ACCESSRECEIVE2.cpp:212: erreur: cannot convert ‘char (*)[20]’ to ‘const char*’ in initialization
Logged

France
Offline Offline
Sr. Member
****
Karma: 2
Posts: 380
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Montre nous le code des lignes 203 et 212 concernées par les erreurs stp.
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1967
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bon je viens de réussir en créant un tableau tout bête et en mettant les variables dedans après.
c'est pas très catholique, mais ca fonctionne.
sinon pour les erreurs, ca allait sur des lignes commentées, donc je comprends pas trop pourquoi.

voila ce qui foncitonne
Quote
char* tableau[6];

loop(){

//tout le reste au dessus
//et
tableau[0]=donnee1;
tableau[1]=donnee2;
tableau[2]=donnee3;
tableau[3]=donnee4;
tableau[4]=donnee5;


    Serial.println("envoie des donnees");
      for (int compt=0;compt<5;compt++) {
          Serial.println(tableau[compt]);
    }


Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 224
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sinon pour les erreurs, ca allait sur des lignes commentées, donc je comprends pas trop pourquoi.

Les numéros de lignes sont ceux du fichier *.cpp généré par la chaîne de compilation Arduino, pas dans le sketch *.ino  smiley-wink
Logged


Pages: [1]   Go Up
Jump to: