Salut pepe et tous,
D'abord pepe j'aimerais encore te remercie. Tes fonctions et aide m'ont vachement aidé!!!!!
Aussi, je me suis trompé dans mon exemple. Je remets le code correct avec explication.
Ensuite, je collerai les fonction de pele qui pourrait être utile à d'autre.
Ensuite, je poserai mon problème, car il est toujours là. (J'ai encore du mal avec les char et pointer)
boolean sms_read(int sms_pos,char sms_from_number, char *sms_date, char *sms_time, char *sms_text)
{
// Definie une variable
char cmd[12];
// Defini la command
sprintf(cmd,"AT+CMGR=%d,1",sms_pos);
//execute la commande et place la réponse dans buffer
sendATcommand(cmd,"OK",2000,true,false,true); // commande, attend pour le OK, ln, retourne uniquementla réponse de la commande, debug
// Met chaque ligne du bouffer dans un array 0:AT+CMGR=1,1, 1:, 2:+CMGR: "REC READ","33333","","13/09/08,14:24:43+08", 3:, 4:OK
// La fonction sendATcommand enregistrer le buffer par ligne dans buffer_by_line
// Ci-dessous je controlle buffer_by_line
for(int b =0; b<NBLINES;b++)
{
Serial.print(b);
Serial.print(F(" : "));
Serial.println(buffer_by_line[b]);
}
/* ce qui affiche ceci, donc OK
0 : AT+CMGR=2,1
1 :
2 : +CMGR: "REC READ","55555","","13/09/08,14:25:34+08"
3 : Das von Ihnen gesendete Keyword ist leider falsch. Le mot cle envoye est malheureusement faux.
4 :
5 :
*/
// J'affiche le message recu
Serial.print(F("Message :")); Serial.println(buffer_by_line[3]);
// Maintenant j'ai besoin de 5555, de 13/09/08 et de 14:25:34+08
// Donc j'utilise une des fonction de _pepe_. Mais ca bug de mon cote
splitString(buffer_by_line[2], splitedString, ",");
Serial.print(F("From :")); Serial.println(buffer_by_line[2]);
}
Ci-dessu, j'utilise un fonction qui va splité le contenu de buffer_by_line[2] et avoir le résultat de splitedSttrig comme ceci
0:+CMGR: "REC READ",
1:"55555",
2:"",
3:"13/09/08,
4:14:25:34+08"
Il faudra aussi que je trouve une solution pour supprimer les ". En PHP, il y str_replace('"','');, mais en C++??
Dans tous les cas, ceci
splitString(buffer_by_line[2], splitedString, ",");
m'affiche un message d'erreur
sim908_cooking:814: error: cannot convert 'char*' to 'char**' for argument '2' to 'void splitString(char*, char**, char)'
Pourtant splitString() demand trois char, et je lui envoie trois char, non????????
Moi je crois que je ne métrise pas les * comme char * var[], ou encore char **var[]; :~ :~
Voilà la finction splitString de pepe. J'ai ajouté un troisième paramètre.
// SlitString
#define NBVALS 14
char splitedString[NBVALS];
void splitString(char *ligne, char **splitedString, char delimiter)
{
char *p = ligne;
int i = 0;
splitedString[i++] = p;
while (*p) {
//if (*p==',') {
if(*p = delimiter){
*p++ = '\0';
if (i<NBVALS)
splitedString[i++] = p;
} else
p++;
}
while(i<NBVALS)
splitedString[i++] = p;
}
Pour info, la function qui me permets d'avoir le buffer par ligne est la suivante. Ca fonctionne
// bufferByLine
#define NBLINES 6
char *buffer_by_line[NBLINES];
void bufferByLine(char *buffers, char **buffer_by_line) // Buffer, resulta in, nb of line
{
char *p = buffers;
int 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;
}