Autor Tema: AYUDA!!. SEPARAR UN STRING GSM  (Leído 2479 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
AYUDA!!. SEPARAR UN STRING GSM
« en: 14 de Abril de 2014, 21:33:36 »
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:


 

Código: Text
  1. #include <18F4550.h>
  2.          #fuses   PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT      
  3.          #use delay(clock=48000000,RESTART_WDT)
  4.          #use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, parity=N, bits=8,restart_wdt)
  5.          #byte porta = 0xF80 #byte portb = 0xF81 #byte portc = 0xf82 #byte portd = 0xf83 #byte porte = 0xf84
  6.          #priority rda  
  7.          #include <string.h>
  8.          #define BUFFER_SIZE 60                                         // Buffer size you can adjust this size
  9.  
  10.          char  buffer[BUFFER_SIZE];                                     // buffer
  11.          char b=0x00;                                                   // Last characters recived
  12.          int  xbuff=0x00;
  13.          short sms_mode=false;                                          // It's a flag when is true read sms( lee_sms())
  14.  
  15.          void lee_sms();
  16.          void inicbuff(void);                                           // Limpia buffer
  17.          void inicmodulo(void);
  18.  
  19.          #int_RDA
  20.          RDA_isr()
  21.          {if(kbhit()){b=getc(); buffer[xbuff++]=b; } return 0; clear_interrupt(int_rda); }
  22.          
  23.          void main(void)
  24.          {
  25.          setup_adc_ports(NO_ANALOGS);
  26.          setup_adc(ADC_OFF);
  27.          enable_interrupts(INT_RDA);
  28.          enable_interrupts(GLOBAL);    
  29.          inicbuff();
  30.          inicmodulo();      
  31.    
  32.          for(;;)
  33.          {{ lee_sms(); }}}
  34.          
  35.          void inicmodulo(void)
  36.          {
  37.          printf("AT\n\r"); delay_ms(500); inicbuff();
  38.          printf("ATE0\n\r"); delay_ms(500); inicbuff();
  39.          printf("AT+CLIP=1\n\r"); delay_ms(500); inicbuff();                                
  40.          }
  41.          
  42.          void lee_sms(void)
  43.          {        
  44.          char *ptr;
  45.          char llamada[]="RING";
  46.          //char conf_sms[]="+CLIP: \"1234567891\",129";                   //  Esto es lo que quiero capturar
  47.          
  48.          ptr=strstr(buffer,llamada);
  49.          if(strncmp(ptr,llamada,4)==0) { printf("AT+CHUP"); delay_ms(100); output_high(PIN_A0);  delay_ms(6000); inicbuff(); output_low(PIN_A0); }
  50.          return;
  51.          }
  52.          
  53.          void inicbuff(void)
  54.          { int i; for(i=0;i<buffer_size;i++){ buffer[i]=0x00; restart_wdt(); } xbuff=0x00; return; }
« Última modificación: 15 de Abril de 2014, 17:32:15 por mariacontenis »

Desconectado aldoMO

  • PIC10
  • *
  • Mensajes: 18
Re: AYUDA!!. SEPARAR UN STRING GSM
« Respuesta #1 en: 10 de Septiembre de 2014, 11:18:49 »
hola mariacontenis, como estas?.
pudiste solucionar este problema?
yo también estoy trabajando con un sim900, lo utilizo para enviar datos por gprs, hasta ahora logre enviar los datos, y todo funciona perfecto,
mi único problema es que no puedo verificar si se realizo correctamente la conexión, y creo que esto me podría servir
para verificar, pero no entiendo bien tu código...soy nuevo en  la programación de pic..podrías ayudarme?
lo que necesito hacer es verificar cada una de las respuestas que me da el modulo sim900 después de enviarle un comando AT.
gracias!

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re: AYUDA!!. SEPARAR UN STRING GSM
« Respuesta #2 en: 02 de Noviembre de 2014, 13:41:11 »
Que tal aldmo, si te puedo ayudar. Te anexo un pdf que te será muy útil para lo que necesitas.

Si me comentas lo que pretendes hacer te podría orientar. Saludos...


Bueno el pdf es muy pesado, pero mándame un mail a martinez_cvm@hotmail.com y te lo proporciono.