Extraer el contenido del mensaje en SIM900

0

Hola a todos. Estoy interactuando con GSM SIM900 con atmega32. Estoy tratando de extraer el contenido del mensaje. El usuario enviará un mensaje como CHANGE7532167845 a la SIM instalada en el dispositivo GSM. Así que para extraer esto estoy usando para bucle seguido de muchas condiciones. Todo lo que necesito hacer es guardar el número en otra variable. El siguiente es mi código:

for(int k =0; smscontent[k]!=NULL;k++)
        {
            if (smscontent[k] == 'C')
            {
                if (smscontent[k+1] == 'H')
                {
                    if (smscontent[k+2] == 'A')
                    {
                        if (smscontent[k+3] == 'N')
                        {
                            if (smscontent[k+4] == 'G')
                            {
                                if (smscontent[k+5] == 'E')
                                {


                                    if(isdigit(smscontent[k+6]))
                                    {
                                        serial_Tx("MATCH");

                                    }

                                }
                            }

                        }
                    }
                }


            }
            }

Mi control está llegando a isdigit porque en la terminal me sale MATCH pero luego, ¿qué debo hacer para guardar el número en una variable? Por favor ayuda

función serial_Tx

void serial_Tx(char *str)
{
    for (unsigned int i=0;str[i]!=0;i++)
    {
        UDR=str[i];
        while(!(UCSRA&(1<<UDRE))); 


    }


}
    
pregunta anna carolina

1 respuesta

0

Deberías revisar algunos tutoriales básicos de manejo de cadenas.

Sugeriría usar strstr (C) o string :: find (C ++) en lugar de un elaborado if-if-if.

//C++
std::size_t found = smscontent.find("CHANGE");
if (found!=std::string::npos){
   std::string valueString = smscontent.substr(found+6/*strlen("CHANGE")*/);
   int value = std::stoi(valueString,nullptr);
}

En realidad no tengo idea de si el código anterior se compila o es algo que estás buscando.

//C
char buffer[20] = {'
sscanf(smscontent,"CHANGE%u",value);
'}; int value = 0; char * pposition = strstr(smscontent,"CHANGE"); ptrdiff_t position = pposition - smscontent; if(pposition != NULL){ strcpy(buffer, pposition); value = atoi(buffer); }

Sin embargo, podría haber opciones mucho más fáciles, especialmente cuando usas C ++ o sscanf (si es posible)

simplemente:

//C++
std::size_t found = smscontent.find("CHANGE");
if (found!=std::string::npos){
   std::string valueString = smscontent.substr(found+6/*strlen("CHANGE")*/);
   int value = std::stoi(valueString,nullptr);
}

y el valor se guardará en la variable: "valor"

    
respondido por el Paul

Lea otras preguntas en las etiquetas