Bonjour à tous,
On m’a porposé une excellente fonction. J’aimerais légèrement la modifier et en m’y penchant dessus, il y a un truc qui m’interpelle et que je n’arrive pas à comprendre.
Voici les détails
Ceci sont les lignes à traiter. Elle sont contenues dans la variable ‘buffer’ (char buffer[400]) et elle est passée dans le paramettre ‘buffers’, dans la fonction qui suit plus bas
AT+CENG?
+CENG: 1,1
+CENG:0,"0016,30,99,228,02,45,7509,05,05,1388,255"
+CENG:1,"0885,19,14,750e,228,02,1388"
+CENG:2,"0875,18,12,750d,228,02,1388"
+CENG:3,"0018,26,42,750a,228,02,1388"
+CENG:4,"0014,23,44,750b,228,02,1388"
+CENG:5,"1017,18,47,5f5d,228,02,1388"
+CENG:6,"0874,15,13,147d,228,02,1388"
OK
Cette fonction, va mettre toutes ces lignes dans un array. Voic le fonction
// buffer_by_line est déclarée au dessus de mon setup ainsi:
// char *buffer_by_line[13];
void SIM908::bufferByLine(char *buffers, char **buffer_by_line)
{
Serial.println(buffers);
char *p = buffers;
byte i = 0;
buffer_by_line[i++] = p;
while (*p) {
if (*p=='\n') {
*p++ = '\0';
if (*p=='\r')
*p++ = '\0';
if (i<NBLINES)
buffer_by_line[i++] = p;
} else
if (*p=='\r') {
*p++ = '\0';
if (*p=='\n')
*p++ = '\0';
if (i<NBLINES)
buffer_by_line[i++] = p;
} else
p++;
}
while(i<NBLINES)
buffer_by_line[i++] = p;
}
Et voici le résultat que va afficher ceci
for(byte cc=0; cc <= NBLINES; cc++ )
{
Serial.print(cc); Serial.print(F(":"));Serial.println(supprimeCaractere(buffer_by_line[cc],'"'));
}
Résultat
0:
1:
2:
3:
4:+CENG:0,0016,30,99,228,02,45,7509,05,05,1388,255
5:+CENG:1,0885,19,14,750e,228,02,1388
6:+CENG:2,0875,18,12,750d,228,02,1388
7:+CENG:3,0018,26,42,750a,228,02,1388
8:+CENG:4,0014,23,44,750b,228,02,1388
9:+CENG:5,1017,18,47,5f5d,228,02,1388
10:+CENG:6,0874,15,13,147d,228,02,1388
11:
12:
13:
Ma question 1
Pourquoi et qu’es-ce qu’il fait que les lignes 0,1,2,3 et 12 sont vides.
C’est ce que je n’arrive pas à comprendre dans la fonction
C’est c’est a cause de \n, pourquoi il ne fait pas la meme chose avec les ligne 4,6,7… etc?.
Qu’es-ce qu’il fait pour qu’il concidere que les lignes 4,5,6,7,8,9,10.
C’est bien ce que je veux, mais je n’arrive pas a comprendre ce qui distingue les lignes à garder et à supprimer.
Ma deuxième question
J’aimerais bien modifier la fonction pour avoir ceci en sortie
0:+CENG:0,0016,30,99,228,02,45,7509,05,05,1388,255
1:+CENG:1,0885,19,14,750e,228,02,1388
2:+CENG:2,0875,18,12,750d,228,02,1388
3:+CENG:3,0018,26,42,750a,228,02,1388
4:+CENG:4,0014,23,44,750b,228,02,1388
5:+CENG:5,1017,18,47,5f5d,228,02,1388
6:+CENG:6,0874,15,13,147d,228,02,1388
Que me suggeriez-vous?
Milles mercis