Error al obtener datos de GSM SIM900

1

Estoy interactuando con GSM SIM900. Escribí un programa para poder leer el SMS en SIM900. He hecho una función para transmitir y recibir. Cada vez que llega msg, GSM responde con +CMT junto con el número de ranura. Estoy tratando de extraer ese número de ranura que está en dígitos, pero obtengo valores de basura

Aquí está el código:

while(1)
{
    if (serial_Rx() != NULL) // SOMETHING PRESENT TO BE READ
    {
        serial_Tx("done"); // print done 
        PORTC = 0x01; // turn on led
        for (int i=0;i<=14;i++)
        {
            data[i] = serial_Rx(); //storing received in data

            if(isdigit(data[i]))
            {
                serial_Tx("enter");
                PORTC = 0x02;
                data1[i] = data[i];
                serial_Tx(data1[i]);
            }
        }               
    }
}

Transmite y recibe funstions:

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

char serial_Rx()
{
    //Wait untill a data is available
    while(!(UCSRA & (1<<RXC)))
    {
         //Do nothing
    }

    //Now USART has got data from host and is available is buffer
    return UDR;
}

void uart_put(char data)
{
    UDR=data;
    while(!(UCSRA&(1<<UDRE)));
}

Hiperterminal:

    
pregunta anna carolina

1 respuesta

0

En su código, la siguiente llamada de función es incorrecta:

serial_Tx(data1[i]);

Como data1[i] tiene un tipo de char pero void serial_Tx(char *str) espera un char* , esta función es para enviar cadenas, no caracteres individuales. De esta manera, causa un error de tiempo de ejecución, por lo tanto, no obtendrá el resultado esperado.

Sin embargo, no generará un error de compilación, pero el compilador dará una advertencia como esta:

Se recomienda verificar y corregir estas advertencias, ya que, como puede ver, pueden causar problemas en el tiempo de ejecución.

Entonces, reemplaza la función anterior con la función void uart_put(char data) , como:

uart_put(data[i]);

y funcionará.

    
respondido por el Bence Kaulics

Lea otras preguntas en las etiquetas