Bonjour à tous,
Je travaille sous Mac et j'ai un Arduino Leonardo.
J'avance dans mon priojet et je tarvaille sur un fonction qui va enregistrer les téléphone dans la carte SIM et une fois fais, il liste les 10 premiere positions. Ce qui me permets de voir si l'enregistrement est bien fait.
Aussi, temporairement, quand j'allume le Leonardo, des que le module est prêt, il liste le phonebook de la carte SIM.
Ensuite, dans mon terminal, si je tape dir,w,2,+41761239955, mon programme va comprendre que c'est un commande liée au director, qu'il doit enregistrer, à la position 2, le numero +41761239955.
Généralement, quand la fonction dir_list(), qui liste les numeéro enregistré, après qu'il ait affiché l'avant dernier position, je pers la connection USB!! et ceci, après avoir enregistrer un numéro.
Mais pourquoi?
void loop()
{
#ifdef DEBUG
serialhwread();
#endif
}
void serialhwread(void)
{
int i=0;
char inSerial[5]; //inSerial[20]
boolean error = false;
if (Serial.available() > 0){
while (Serial.available() > 0) {
inSerial[i]=(Serial.read());
delay(10);
i++;
}
inSerial[i]='\0';
/* Atcion phonebook */
if(!strncmp(inSerial,"dir",3))
{
if(!strncmp(splitedString[1],"w",1))
{
if(strlen(splitedString[3]) < 12)
{
#ifdef DEBUG
Serial.println(F("> Write to dir => KO"));
Serial.println(F(" Phone number must have 12 digits including the + for the country code."));
#endif
}
else
{
if(strlen(splitedString[2]) < 1)
{
#ifdef DEBUG
Serial.println(F("> Write to dir at the next available position"));
#endif
dir_write(splitedString[3]);
}
else
{
#ifdef DEBUG
Serial.print(F("> Write to dir at the position "));
Serial.println(atoi(splitedString[2]));
#endif
dir_write_to_pos(atoi(splitedString[2]),splitedString[3]);
};
}
}
else
{
dir_del(atoi(splitedString[2]));
}
}
else if(!strncmp(splitedString[1],"r",1))
{
#ifdef DEBUG
Serial.println(F("> Read dir"));
#endif
}
else if(!strncmp(splitedString[1],"l",1))
{
dir_list(10);
}
else
{
Serial.println(F("Erreur"));
}
}
// Vide inSerial
inSerial[0]='\0';
}
}
#endif
Voici les function qui écrive dans le Phone Book
void dir_write(char *phone_number)
{
char cmd[27];
sprintf(cmd,"AT+CPBW=,\"%s\"",phone_number);
sendATcommand(cmd,"OK",2000,true,false,false); // Put 5ft parameter to true, to have the response in buffer.
delay(500);
#ifdef DEBUG
dir_list(10);
#endif
}
void dir_write_to_pos(int pos, char *phone_number)
{
char cmd[28]; //AT+CPWBW=1,"+41761235689"
sprintf(cmd,"AT+CPBW=%d,\"%s\"",pos,phone_number);
sendATcommand(cmd,"OK",2000,true,false,false); // Put 5ft parameter to true, to have the response in buffer.
delay(500);
#ifdef DEBUG
dir_list(10);
#endif
}
Et celle qui liste
void dir_read(int pos)
{
char cmd[12];
sprintf(cmd,"AT+CPBR=%d",pos);
sendATcommand(cmd,"OK",2000,true,false,false); // Put 5ft parameter to true, to have the response in buffer.
splitString(supprimeCaractere(buffer_by_line[2],'"'),splitedString);
strcpy(phone_number,splitedString[1]);
#ifdef DEBUG
Serial.print(pos);Serial.print(F(":"));Serial.println(phone_number);
#endif
}
void dir_list(int nb)
{
for(int dl=1; dl<= nb; dl++)
{
dir_read(dl);
}
}
Bon ca fait beaucoup de lecture.
![]()
Je me demande si ce n'est à cause des déclarations de variable
char cmd[15];
Pourtant j'ai fait attention que la variable soit assez grande pour recevoir les catacteres
voir dir_write_to_pos();
Je me demand s'il est impératif de mettre '\0' pour "fermer" le char, étant donner que le char lui reste de la place.
void dir_write_to_pos(int pos, char *phone_number)
{
char cmd[28]; //AT+CPWBW=1,"+41761235689"
sprintf(cmd,"AT+CPBW=%d,\"%s\"\0",pos,phone_number); // ICI!!!!
sendATcommand(cmd,"OK",2000,true,false,false); // Put 5ft parameter to true, to have the response in buffer.
delay(500);
#ifdef DEBUG
dir_list(10);
#endif
}
Bref, je en sais pas si je perd ma connection USB, si c'est à cause de code ou si c'est un problème de Hardware???
Milles mercis pour votre lecture. Et s'il vous faut plus d'explication, dites le moi ![]()