Go Down

Topic: concaténer une variable avec un nombre dans une boucle (Read 1 time) previous topic - next topic

infobarquee

Sep 18, 2012, 10:13 am Last Edit: Sep 18, 2012, 10:19 am by infobarquee Reason: 1
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

infobarquee

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: [Select]
donnee0
donnee1
donnee2
donnee3
donnee4
donnee5

au lieu de
Quote
A-0
B-255-60
C-199-60
D-124-60
E-99-60


B@tto

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Grag38

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: [Select]


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: [Select]


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


infobarquee

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

Grag38

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

infobarquee

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]);
    }



SesechXP


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  ;)
Julien - www.idreammicro.com

Go Up