[Resolu]Comment extraire qu'une partie d'une chaine de caractere a partir d'une

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 :slight_smile:

    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

Salut,

Je te conseille d'étudier string.h ;) : http://www.cplusplus.com/reference/cstring/

Bon, un peu plus simple que je l'avais pensé. J'ai modifié ma fonction ainsi et ca semble bien fonctionner

if(y)
              {
                
                
                if(buffer[x] == ',')
                {
                  //message_pos[count_message] = buffer[x];
                count_message++;
                  y=0;
                  Serial.println(F(""));
                }
                else
                {
                  //Serial.print(F("(")); Serial.print(buffer[x]); Serial.println(F(")"));
                Serial.print(buffer[x]);
                }
                
              }