Bonjour à tous,
Je travaille sur les SMSs
J'utilise une fonction AT qui va lister les messages reçus. La commande est
AT+CMGL=\"REC UNREAD\",1
Ca marche et ca m'affiche ceci, par exemple:
+CMGL: 2,"REC UNREAD","+41760000000","","14/09/25,13:25:42+08"
Salut, voici un sms
+CMGL: 3,"REC UNREAD","+41760000000","","14/09/25,13:25:42+08"
Salut, voici un autre sms
+CMGL: 6"REC UNREAD","+41760000000","","14/09/25,13:25:42+08"
Salut, voici encore un autre sms
Après +CMGL: il y a un2, un 3 et un 6. Ce chiffre correspond a la position du message.
Donc quand je veux lire le message, je dois indiquer la position du message avec la commande
AT+CMGR=6,1 // 6 est la position du sms a lire
Je dois donc extraire ce nombre. J'ai réussi a le faire mais j'ai un problème quand le nombre a deux décimals.
Pourcela j'ai fait ce code: (J'espère qu'il vous semblera bien fait ![]()
char replyCommand [7] = {'+','C','M','G','L',':',' '};
//char compm [7] = {'0','0','0','0','0','0','0 '};
uint8_t x=0;
int y;
int count_message = 0;
char message_pos[10];
int ma=0;
// this loop waits for the answer
do{
if(Serial1.available() > 0){
if(x < BUFFERSIZE-1) // Do not fill the buffer more the it size
{
buffer[x] = Serial1.read(); // response
// Si le flag y est a 1, alors affiche le caractere suivant, soit le 7 eme et met le dans un buffer
if(y)
{
// ICI J AFFICHE LE CHIFFRE . Dans cet exemple, il affichera 2,3,6
Serial.println(buffer[x]);
// met dans le buffer
//message_pos[count_message] = buffer[x];
// Compte le nombre d emessage recu
count_message++;
// remte le flag a 0
y=0;
}
// Compare le caractere, si oui continue
if (buffer[x] == replyCommand[ma])
{
// Si les 6 premieres caracteres correspondent met le flag y à 1
if(ma==6)
{
y=1;
}
else
{
y=0;
}
// Afin de s'assurer que la correspondance des caracteres comparés se suivrent incrémente de 1 et
// remets à zero imediatement si le caratere suivant ne correspond pas
ma++;
}
else
{
ma = 0;
}
x++;
}
}
}
while( ((millis() - previous) < timeout));
Serial.print(count_message); Serial.println(F(" messages"));
Le problème dans se code, c'est qu'il va que relevé le numero se trouvant à la septième position. Donc tant que les messages se trouveront entre la position 1 à 9, ca marchera, mais aussi tôt qu'il se trouvera à la position 10, je recupérerai le 1 de 10!!! Donc bug!
Vous constarerez que la position d'un message est toujours suivit par une virgule.
Ma question est la suivante.
Comment pourrais-je récupérer tous les chiffres depuis la position 7.
Voir mon code ou le flag y est mis a 1
if(ma==6)
....
jusqu'à la virgule sans prendre la virgule????
Ainsi je ne serai pas souci si mon nombre est 11 ou 110....
Milles mercis pour vos lumières