Bonjour,
voila j'ai créé une boucle qui récupère une chaine de caractères dans une liaison UART.
J'essaie de filtrer les éléments mais voila j'ai des lacunes en C/C++ aussi, je vous soumets le sketch qui fonctionne, mais je ne comprends pas pourquoi...
voici plus de précision :
pour que ce sketch fonctionne j'ai rajouté cette ligne de code :"String chaine=String(tableau[a]);" or je n'utilise pas la variable "chaine".
Je crois que le problème vient d'une incompréhension sur l'utilisation des "String " et "char", je vous laisse juges et attends vos remarques et explications avec tous mes remerciements.

si vous avez des ouvrages à me conseiller je suis preneur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
 
int i=0, a=0, b=0;
 
 
void setup() 
{
  Serial.begin(9600);
  delay (1000);
}
 
void loop()
{
  char data[]="CO2_ON=1;CO2_OFF=1;heureActuelle=(0, 0, 2);DEPART=(0, 0);ARRET=(23, 30)";
  //String chaine=String(data);
  char *tableau[4]; /* on pointe le contenu de l'adresse de chaque ligne du tableau*/
  if (b < 4)
  {
    for (a=0; a<=4; a++)
    {
      if (a > 0)
      {
        tableau[a]=strtok(0,";");     /*découpage de la chaine au niveau des points virgules*/
      }                               /*                                                    */
      else                            /*         chaque ligne du tableau                    */
      {                               /*                                                    */
        tableau[a]=strtok(data,";");  /*         contient un bout de la chaine              */
      }
      String chaine=String(tableau[a]);
      char buff[16];
      sprintf(buff, "tableau[%d]= %s", a, tableau[a]);
      Serial.println(buff);
      b++;
    }
  }
}

PS : le résultat attendu est bien le suivant :
tableau[0]= CO2_ON=1
tableau[1]= CO2_OFF=1
tableau[2]= heureActuelle=(0, 0, 2)
tableau[3]= DEPART=(0, 0)
tableau[4]= ARRET=(23, 30)