Que tal amigos.
Tengo implementado un codigo en donde utilizo un MODEM GSM, en donde realizo una llamada y el modem me responde de la siguiente manera:
-------------------------------------------------------------------------------
RING
+CLIP: "1234567891",129 // Los 10 números "1234567891" son los de un numero celular
-------------------------------------------------------------------------------
Pues resulta que por medio de la libreria string capturo la palabra RING y me enciende un led (PIN_A0) en el proteus y físicamente, esto lo hace correctamente.
El problema esta cuando pretendo capturar la cadena +CLIP: "1234567891",129, resulta que en el proteus si se captura por que enciende el led, pero físicamente no lo hace.
lo estoy capturando con: char conf_sms[]="+CLIP: \"1234567891\",129";
Por favor podrían ayudarme con esto que ya me ah estado dando vueltas en la cabeza, lo que quiero es si recibe el numero 1234567891 encienda el LED o todo el
+CLIP: "1234567891",129.
Este código lee el RING y hace lo ya mencionado:
#include <18F4550.h>
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT
#use delay(clock=48000000,RESTART_WDT)
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, parity=N, bits=8,restart_wdt)
#byte porta = 0xF80 #byte portb = 0xF81 #byte portc = 0xf82 #byte portd = 0xf83 #byte porte = 0xf84
#priority rda
#include <string.h>
#define BUFFER_SIZE 60 // Buffer size you can adjust this size
char buffer[BUFFER_SIZE]; // buffer
char b=0x00; // Last characters recived
int xbuff=0x00;
short sms_mode=false; // It's a flag when is true read sms( lee_sms())
void lee_sms();
void inicbuff(void); // Limpia buffer
void inicmodulo(void);
#int_RDA
RDA_isr()
{if(kbhit()){b=getc(); buffer[xbuff++]=b; } return 0; clear_interrupt(int_rda); }
void main(void)
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
inicbuff();
inicmodulo();
for(;;)
{{ lee_sms(); }}}
void inicmodulo(void)
{
printf("AT\n\r"); delay_ms(500); inicbuff();
printf("ATE0\n\r"); delay_ms(500); inicbuff();
printf("AT+CLIP=1\n\r"); delay_ms(500); inicbuff();
}
void lee_sms(void)
{
char *ptr;
char llamada[]="RING";
//char conf_sms[]="+CLIP: \"1234567891\",129"; // Esto es lo que quiero capturar
ptr=strstr(buffer,llamada);
if(strncmp(ptr,llamada,4)==0) { printf("AT+CHUP"); delay_ms(100); output_high(PIN_A0); delay_ms(6000); inicbuff(); output_low(PIN_A0); }
return;
}
void inicbuff(void)
{ int i; for(i=0;i<buffer_size;i++){ buffer[i]=0x00; restart_wdt(); } xbuff=0x00; return; }