Estoy escribiendo un código C para recibir la batería usando el módem GSM SIM 800E. Estoy usando AtMega16 uC. Aquí he usado comandos AT para obtener información de la batería.
void uart_send(unsigned char ch) //Function to send via UART
{
while(!(UCSRA &(1<<UDRE)));
UDR=ch;
}
void bat() //Function to get battery info and send SMS via UART
{
int x;
char battery[16];
UCSRB &= ~(1<<UDRIE);
writecommand("AT+CBC"); //AT command to get battery status(My program stuck here)
for(int x = 0;x<20;x++) //Reading 20 characters by the response of AT+CBS
{
while(!(UCSRA & (1<<RXC)));
battery[x] = UDR;
}
UCSRB |= (1<<RXCIE);
for(int x=1;x<20;x++) //sending 20 characters to UART
{
uart_send(*battery);
}
}
int main()
{
DDRB=0xff; //PORT as output port for LCD
uart_init(); //initializing UART
_delay_ms(1000);
writecommand("AT");
writecommand("AT+CMGF=1"); //setting GSM to Text Mode
writecommand("AT+CNMI=2,0,2,0,0");
while(1)
{
bat();
transmit("AT+CMGS=\"+9195xxxxxxxx\"\r"); //Sending SMS with values in UART buffer
_delay_ms(10);
uart_send(26); // command to send SMS
}
Cuando ejecuto el código, se atasca en la función bat () (en "AT + CBC") muestra la información de la batería en la pantalla LCD y en el terminal, pero no la envía por SMS y el programa no continúa. . Por favor, sugiéreme las maneras de obtener la información a través de SMS.
Editar
Con respecto a los comentarios de Loongcat
Estoy recibiendo 20 caracteres después del comando "AT + CBC", entonces debería recibir eso. este es el bucle for(int x = 0;x<20;x++)