Autor Tema: Recibir un SMS desde un ceular con un pic para controlar dispositivos  (Leído 27638 veces)

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

Desconectado xlJaGuArlx

  • PIC10
  • *
  • Mensajes: 3
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #75 en: 13 de Abril de 2012, 20:52:45 »
hola, estoy haciendo un proyecto parecido (comandos at, sms, recibir, enviar, etc), solamente que tengo problemas por que al momento de poner c = getc; el programa ya no hace nada, pero si le quito esa sentencia, hace la siguiente instruccion. A el pic es 16f877a

c = getc;--> recibe caracter
output_toggle(pin_b7); -->solo me indica si recibio algo (solo trato de saber si recibo por lo menos un caracter por eso el tiempo no importa)
delay_ms(500);--> Este tiempo solo para q se vea el destello

Segun estaba viendo arreglaron el problema al poner el pin de rx como entrada, pero si utilizo la sentencia:

#use RS232 (baud = 9600, bits = 8,  parity = N , xmit = pin_c6, rcv = pin_c7), no se supone que ya lo pone??
mi codigo es el siguiente:

#include "C:\Users\JaGaM\Documents\ITTG\SMS_AT\CODIGO\main.h"
#use delay (clock = 4M)
#use RS232 (baud = 9600, bits = 8,  parity = N , xmit = pin_c6, rcv = pin_c7)


char c;
int aceptacion1 = 0;


#int_RDA
void  RDA_isr(void)
{
   disable_interrupts(INT_RDA);
   if(kbhit())
   {
      aceptacion1 = 1;
   }
   
   
}


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   //INTERRUPCIONES
   
   //lcd_init();
   
   // TODO: USER CODE!!
     
   output_high(pin_b7);
   delay_ms(1000); //espero 1 segundo
   printf("ATE0\r\n");  //DESACTIVO EL ECO
   delay_ms(3000);
   output_low(pin_b7);
   output_high(pin_b6);
   delay_ms(1000); //espero 3 segundos
   printf("AT+CMGF=1\r\n");
   delay_ms(3000);
   output_low(pin_b6);
   
   aceptacion1 = 0;
   
   fgg:
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   printf("AT\r\n");
   
   while(aceptacion1 == 0){
   }
      c = getc();
      output_high(pin_b6);
      delay_ms(500);
      output_low(pin_b6);
      delay_ms(500);
   
   
   
   if(c == 'O' || c == 'o')
   {
      output_high(pin_b6);
      delay_ms(1000);
      output_low(pin_b6);
      delay_ms(1000);
   }
   if(c == 'k' || c == 'K')
   {
      output_high(pin_b6);
      delay_ms(3000);
      output_low(pin_b6);
      delay_ms(3000);
   }
   
   aceptacion1 = 0;     
   goto fgg;
     
}

alguna ayuda...?

Desconectado luc_eluani88

  • PIC10
  • *
  • Mensajes: 32
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #76 en: 17 de Diciembre de 2012, 20:15:06 »
Yo tengo un programa que todavia no puedo probar para el SIM900, que tiene lista negra y palabra habilitada.

Código: C
  1. #include <v03.h>
  2. #define PIN_ON  output_high
  3. #define PIN_OFF output_low
  4.  
  5. //Variables Globales utilizadas
  6. const int8 lista[177][10]={{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'}};
  7. int d,numok=0,i,j,numcorr,iniciorecpnum;
  8. int const lenbuff=6;  // Tamaño del buffer de recepción
  9. int8 cbuff[lenbuff];   // Buffer de recepcion de datos serie
  10. int const num=10;
  11. int8 numrec[num];
  12. void apertura_y_cierre_porton();
  13. #int_RDA //Interrupcion recepcion caracter
  14. void  RDA_isr(void)
  15. {
  16. d=0;
  17.       d=getchar(SERIAL_SIM900);
  18.       if (d=='"')                //Pregunto si entro un " del modulo gsm caso afirmativo incrementa un contador
  19.          {iniciorecpnum=iniciorecpnum+1;
  20.          }
  21.       if (iniciorecpnum>0 && iniciorecpnum<2) // como el numero llega precedido por comillas "xxxxxxxxxx", pregunto por las comillas despues de que la detecta por 2da vez y acumulo en un vector
  22.          {   numrec[0]=numrec[1];
  23.              numrec[1]=numrec[2];
  24.              numrec[2]=numrec[3];
  25.              numrec[3]=numrec[4];
  26.              numrec[4]=numrec[5];
  27.              numrec[5]=numrec[6];
  28.              numrec[6]=numrec[7];
  29.              numrec[7]=numrec[8];
  30.              numrec[8]=numrec[9];
  31.              numrec[9]=d;
  32.          }
  33.       cbuff[0]=cbuff[1];
  34.       cbuff[1]=cbuff[2];
  35.       cbuff[2]=cbuff[3];
  36.       cbuff[3]=cbuff[4];
  37.       cbuff[4]=cbuff[5];
  38.       cbuff[5]=d;
  39. }
  40.  
  41. #int_RAB
  42. void  RAB_isr(void)
  43. {
  44. if (IR==true)
  45.    {
  46.    apertura_y_cierre_porton();
  47.    }
  48. }
  49.  
  50. void inicializacionSIM900(void)
  51. {
  52.    int cont;
  53.    delay_ms(1000);
  54.    puts("A",SERIAL_SIM900); //para sincronizar el baudrate del SIM 900
  55.    delay_ms(300);
  56.    putchar(0x0d,SERIAL_SIM900);
  57.    delay_ms(1000);
  58.    for(cont=0;cont<5;cont++)              // mando varios AT para el autobauding
  59.          {
  60.          puts("AT",SERIAL_SIM900);
  61.          delay_ms(200);
  62.          putchar(0x0d,SERIAL_SIM900);
  63.          delay_ms(200);
  64.          PIN_ON(LED1);
  65.          delay_ms(200);
  66.          PIN_OFF(LED1);
  67.          }
  68. //-----------------------------------seteos de configuracion del SIM900------------------------        
  69.    puts("AT+CMGF=1\r",SERIAL_SIM900);                  // configuro para que trabaje en modo texto y no PDU
  70.    delay_ms(200);
  71.    putchar(0x0d,SERIAL_SIM900);
  72.    delay_ms(200);
  73.    puts("AT+CNMI=2,2,0,0,0\r",SERIAL_SIM900);                  // configuro para que en cuanto llegue un mensaje lo envie el modulo gsm por el puerto serie
  74.    delay_ms(200);
  75.    putchar(0x0d,SERIAL_SIM900);
  76.    delay_ms(200);
  77.    puts("ATS0=0\r",SERIAL_SIM900);                  // configuro para no atienda el llamado
  78.    delay_ms(200);
  79.    putchar(0x0d,SERIAL_SIM900);
  80.    delay_ms(200);
  81.    
  82. }  
  83.  
  84.  
  85. void main()
  86. {int caractrec=0;
  87.    setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
  88.  
  89.    setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
  90.    enable_interrupts(INT_RDA);
  91.    enable_interrupts(INT_RAB);
  92.    enable_interrupts(GLOBAL);
  93.  
  94.   PIN_OFF(POWERKEYGSM);    //Enciendo modulo GSM
  95.    delay_ms(1200);
  96.    PIN_ON(POWERKEYGSM);
  97. inicializacionSIM900();
  98.    if (caractrec==44)
  99.    {disable_interrupts(INT_RDA);
  100.    delay_ms (1000);
  101.      for (i=0;i<178;i++)                     //Recorro la matriz preguntando si alguno de los numeros cargados se corresponde con el que envio el sms
  102.       {if(numok==10)                         //Si tengo las 10 coincidencias el numero es correcto, caso contrario tendria valor 0. Si alguno de los numeros es correcto habilito la marca para avisar que el numero esta habilitado
  103.             {
  104.             numcorr=1;
  105.             i=178;
  106.             }
  107.                for (j=0;j<10;j++)
  108.                     {  
  109.                      if (lista[i][j]==numrec[j])  //Comparo caracter a caracter los vectores
  110.                          numok=numok+1;
  111.                       else
  112.                          numok=0;
  113.                     }
  114.       }
  115.       if(i==178)
  116.        {
  117.        iniciorecpnum=0;//Una vez que ya compare todos los valores habilito una nueva recepcion
  118.        caractrec=0;
  119.        enable_interrupts(INT_RDA);
  120.        }
  121.   }
  122.     if((cbuff[0]=='p'||cbuff[0]=='P')&&(cbuff[1]=='o'||cbuff[1]=='O') && (cbuff[2]=='r'||cbuff[2]=='R')&& (cbuff[3]=='t'||cbuff[3]=='T')&& (cbuff[4]=='o'||cbuff[4]=='O') (&&cbuff[5]=='n'||cbuff[5]=='N')&& (numcorr==1)) //Pregunto por la palabra habilitada y si el numero se encuentra en la lista habilitada
  123.       {
  124.        cbuff[0]=0;              //Salidas del sistema
  125.        apertura_y_cierre_porton();
  126.        numcorr=0;
  127.        numrec[0]=0;
  128.        }
  129.    else
  130.       {
  131.       numcorr=0;
  132.       numrec[0]=0;
  133.       cbuff[0]=0;
  134.       }
  135.  
  136. }
  137.  
  138. void apertura_y_cierre_porton()
  139. {PIN_ON (PORTAPMAE);
  140. delay_ms (5000);
  141. PIN_ON (PORTAPESC);
  142. delay_ms(25000);
  143. PIN_OFF (PORTAPMAE);
  144. PIN_OFF (PORTAPESC);
  145. delay_ms (40000);
  146. PIN_ON (PORTCIMAE);
  147. delay_ms (5000);
  148. PIN_ON (PORTCIESC);
  149. delay_ms(40000);
  150. PIN_OFF (PORTCIMAE);
  151. PIN_OFF (PORTCIESC);
  152. }

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #77 en: 25 de Abril de 2016, 17:11:50 »
Alguien echo a andar el code de luc_eluani88?.

Lo que me interesa saber es si funciono esta lista de números.

const int8 lista[177][10]={{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'}};
i
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #78 en: 25 de Abril de 2016, 17:24:35 »
Lo unico que hace es comparar esa lista con el numero de quien envio el SMS.

Asi que el "exito" de ese codigo, va a depender de:

- Que se aisle bien y guarde correctamente en el array numrec, el numero de quien recibe el mensaje.
- Luego que la comparacion sea correcta.

Aunque no me gusta la forma de comparar, esta muy rebuscada.

Ahora [177][10] es MUCHOO 1770 bytes, mas que una lista negra, deberia haber una lista blanca..
« Última modificación: 25 de Abril de 2016, 17:27:31 por KILLERJC »

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #79 en: 25 de Abril de 2016, 17:39:15 »
Gracias killerJc. A mi me llamó mucho la atención esa lista por dos razones.

Una por que yo envío sms a un numero de 10 digitos xxxxxxxxxx pero, no se si se puede, enviar el sms a múltiples destinatarios ( números diferentes) con un algoritmo similar a lista en forma de array. Esto para no estar escribiendo el comando de envío de sms a cada destinatario, es decir con un solo comando enviar sms a 10 números telefónicos.

Y lo segundo por que con esa lista se filtran sólo una lista de números aceptados por el módem para realizar el control.

Yo en alguna ocasión intente este code tal cual.con el módem wavecom y no me filtraba el número. Me desespere en intentos fallidos y modificaciones no satisfactorias al code que termine por olvidarme de el. Ahora  intento nuevamente y es por eso que pregunte si alguien le había funcionado ese filtrado de lista o cual seria la mejor manera de realizarlo.

Alguna pista!!.


« Última modificación: 25 de Abril de 2016, 17:46:33 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #80 en: 25 de Abril de 2016, 18:22:55 »
No puedo extenderme demasiado por que no se exactamente como son las librerias que tenes, ni que es lo que te envia el modem cuando recibis un mensaje. Ni tampoco tengo experiencia con estos como para decirte, pero en lo que respecta a la programacion ( sabiendo que se manejan con comandos AT, y es recepcion/transmision UART ) puedo decirte algo.

Pero lo mas dificil a realizar es: Discriminar el numero de quien te envia el mensaje.

Por ejemplo. Para enviar lo que yo veo por internet es que tenes que enviar por UART:

Código: [Seleccionar]
at+cmgs=”NUMEROTELEFONO”
Esperar el >, y escribir el mensaje. Digamos que el numero es 1234567890 y el mensaje es Hello World!, entonces quedaria asi:

Código: [Seleccionar]
Envio: at+cmgs="1234567890"
Espero: >
Envio: Hello World! + caracter de fin de mensaje

Esto lo podes repetir con un simple for para cada numero de telefono. Suponete que creamos una funcion que envie el SMS

Código: C
  1. EnviarSMS("1234567890","Hello World!");

Esta funcion hace lo de arriba. No es muy complejo, veamos un poco mas detallado la funcion ( por si las dudas, igual esta "resumido" ):

Código: C
  1. void EnviarSMS(char *Number, char *Text)
  2. {
  3.      EnviarStringPorUART(" at+cmgs=");
  4.      EnviarStringPorUART(Number);
  5.      while(RecibirPorUART != ">");
  6.      EnviarStringPorUART(Text);
  7.      EnviarStringPorUART("\r\n");
  8. }

Pero ahora si tengo un array con numeros:

Código: C
  1. ArrayConNumeros[3][11] = { "1234567890", "0987654321", "1654568790" };

Podria tranquilamente ponerlo en un for para que se lo envie a los 3 numeros:

Código: C
  1. for ( x = 0; x < 3; x++ )
  2. {
  3.      EnviarSMS(ArrayConNumeros[x],"Hello World!");
  4. }

Ahora la parte de recepcion... Voy a suponer que siempre hay 1 solo mensaje, por lo cual lees 1 y luego lo borras.

Segun en internet debo Enviar: at+cmgr=1  asi me devuelve el mensaje numero 1 ( esto para leerlo, cuando se recibe uno envia otra cosa). Esto devuelve algo asi:

Citar
+CMGR: "REC READ","1234567890",,"12/07/30,00:12:05+32"
Mensaje_aca creo

OK

El labro mas grande que tenes es... tratar de recuperar el numero de telefono, lo que podes hacer es recibir todo eso, ponerlo en un buffer, buscar la primera coma que luego el sigue un ", y tomar esos 10 caracteres. Es decir el numero de telefono 1234567890

Ojo que veo que si usas:

Código: [Seleccionar]
AT+CMGL="ALL"
AT+CMGL="REC UNREAD"

El formato de respuesta cambia a algo asi:

Código: [Seleccionar]
+CMGL: 1,"REC READ","+85291234567",,"07/02/18,00:05:10+32"
Reading text messages is easy.
+CMGL: 2,"REC READ","+85291234567",,"07/02/18,00:07:22+32"
A simple demo of SMS text messaging.
+CMGL: 3,"REC READ","+85291234567",,"07/02/18,00:12:05+32"
Hello, welcome to our SMS tutorial.

OK

Y lo de la primer coma ya no es valido, por eso decia de tomar el primer mensaje y borrarlo, asi siempre hay uno. Pero eso ya pasa mas por recepcion/transmision y no lo que queremos hacer.

Una ves que ubique ese numero solo debo copiarlo a un array de 10 u 11 ( si incluye el caracter nulo) posiciones, y compararlo con cada uno de los numeros que tengo guardado, podes hacer uso de memcpm(); o de strcmp() en caso que uses el caracter nulo.

Si de todos hay una coincidencia entonces actuaras en consecuencia. Como veras lo unico complicado aca es obtener el numero del SMS enviado. Lo demas es cargar los numeros y luego compararlos, o si queren enviar multiples mensajes es un simple for. Por supuesto que la funcion de envio de SMS espera que se envie el otro mensaje antes de proceder a enviar uno nuevo, y tambien deberia tener en cuenta si existe un error en el envio del mismo.

PD: Los comandos los saque de internet, ni siquiera se que modem tenes, yo puse modem wavecom y el primero que salio use.
« Última modificación: 25 de Abril de 2016, 18:35:41 por KILLERJC »

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #81 en: 25 de Abril de 2016, 18:41:01 »
Me agrada la forma en que programas, esto se ve muy bien

ArrayConNumeros[3][11] = { "1234567890", "0987654321", "1654568790" };

for ( x = 0; x < 3; x++ )
{
     EnviarSMS(ArrayConNumeros
  • ,"Hello World!");

}

Hoy probaré lo que se pueda simular en proteus con hyperterminal y te comento.
El señor es mi pastor,  nada me faltará.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #82 en: 25 de Abril de 2016, 22:06:20 »
Gracias KILLERJC por fin quedo!!!!

Muestro el code:
 
Código: CSS
  1. #include <18f4550.h>
  2.          #fuses XT,NOPROTECT,MCLR,NOFCMEN,PUT,NOBROWNOUT,NOVREGEN,NOWDT,NOLVP,NODEBUG,NOCPD,NOWRT
  3.          #use delay(clock=4000000)
  4.          #use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7,stream=MODEM)
  5.          
  6.          char ArrayConNumeros[5][11] = {"1111111111","2222222222","3333333333","4444444444","5555555555"};
  7.          int x;
  8.          
  9.          void main(void)
  10.          {
  11.          fputs("AT\r\n",modem); delay_ms(150);
  12.          fprintf(modem,"AT+cmgf=1\r\n"); delay_ms(200);
  13.          
  14.          while(true)
  15.          {                
  16.          if (input(pin_a1)==0)                                             //Si el pin A1 se activa manda sms
  17.          {
  18.          for (x=0;x<5;x++)
  19.          {        
  20.          fprintf(modem,"\r\nat+cmgs="); delay_ms(100);
  21.          fprintf(modem,ArrayConNumeros[x]); delay_ms(100);
  22.          fprintf(modem,"\r\nHello World!\r\n"); delay_ms(100);
  23.          }
  24.          }
  25.          }
  26.          }

Aunque no de esta forma void EnviarSMS(char *Number, char *Text) pero funciona.  :mrgreen:
         
« Última modificación: 25 de Abril de 2016, 22:10:19 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #83 en: 25 de Abril de 2016, 22:18:43 »
Pero podes hacerlo facilmente, ya que es llevar las cosas a una funcion :P

Código: C
  1. #include <18f4550.h>
  2. #fuses XT,NOPROTECT,MCLR,NOFCMEN,PUT,NOBROWNOUT,NOVREGEN,NOWDT,NOLVP,NODEBUG,NOCPD,NOWRT
  3. #use delay(clock=4000000)
  4. #use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7,stream=MODEM)
  5.          
  6. char ArrayConNumeros[5][11] = {"1111111111","2222222222","3333333333","4444444444","5555555555"};
  7. int x;
  8.          
  9. void main(void)
  10. {
  11.          fputs("AT\r\n",modem); delay_ms(150);
  12.          fprintf(modem,"AT+cmgf=1\r\n"); delay_ms(200);
  13.          
  14.         while(true)
  15.         {                
  16.                 if (input(pin_a1)==0)                                             //Si el pin A1 se activa manda sms
  17.                 {
  18.                         for (x=0;x<5;x++)
  19.                         {        
  20.                                 EnviarSMS(ArrayConNumeros[x],"\r\nHello World!\r\n");
  21.                         }
  22.                 }
  23.         }
  24. }
  25.  
  26. void EnviarSMS( char *Number, char *Text )
  27. {
  28.          fprintf(modem,"\r\nat+cmgs="); delay_ms(100);
  29.          fprintf(modem,Number); delay_ms(100);
  30.          fprintf(modem,Text); delay_ms(100);
  31. }

Eso era todo lo que habia que hacer... ahora eso es para enviar, si queres hacer una lista de recepcion, para que unicamente reciba de algunos numeros vas a tener que encargarte de tratar de sacar el numero de quien lo envio.

Pero no se si eso es lo que querias hacer, o solo lo de enviar a varios numeros nomas.

PD: No se si el codigo funciona, me refiero si meti mal una letra o algo por el estilo.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #84 en: 26 de Abril de 2016, 02:15:37 »
KILLERJC asi como lo escribes me saca un error, es el siguiente: Attempt to create a pointer to a constant de echo era otro error primero pero lo quite con void EnviarSMS( char *Number, char *Text ); al inicio del programa.

Ahora solo queda el que se ve en la imagen. Y si, la meta es filtrar también una serie de números para que solo esos sean aceptados por el módem. Solo que lo primero es lo primero.
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #85 en: 26 de Abril de 2016, 06:51:41 »
Si, el mayor problema es que la string:

"\r\nHello World!\r\n"

Es una constante ( grabado en la Flash y no en la RAM). Por lo va a dar problemas, Podrias intentar asi:

Código: C
  1. void EnviarSMS(const char *Number,const char *Text )
(Esto en ambos, en el prototipo al comienzo y en la declaracion de la funcion)

Para decir que son constantes, y tal ves moleste con el tema de Number que no es constante. Pero para que no ocupe espacio en la RAM ( innecesario ) los numeros de telefono, deberias hacer:

Código: C
  1. const char ArrayConNumeros[5][11] = {"1111111111","2222222222","3333333333","4444444444","5555555555"};

Asi los pone en la Flash y no en la RAM.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #86 en: 30 de Abril de 2016, 09:47:14 »
Jejejeje  :mrgreen:

Hola KILLERJC. Ya de regreso. Podes haber pensado que quedaría esto así. Pero después de tantos intentos, creo que esta parte así quedara funcionando. Al menos en proteus funciona bien.

Código: CSS
  1. char ArrayConNumeros[5][11] = {"1111111111","2222222222","3333333333","4444444444","5555555555"};
  2.          int x;
  3.          
  4.          void main(void)
  5.          {
  6.          fputs("AT\r\n",modem); delay_ms(150);
  7.          fprintf(modem,"AT+cmgf=1\r\n"); delay_ms(200);
  8.          
  9.          while(true)
  10.          {                
  11.          if (input(pin_a1)==0)                                             //Si el pin A1 se activa manda sms
  12.          {
  13.          for (x=0;x<5;x++)
  14.          { EnviarSMS(ArrayConNumeros[x],0);}
  15.          }
  16.          }
  17.          }
  18.  
  19.          void EnviarSMS( char *Number, int n )
  20.          {
  21.          fprintf(modem,"\r\nat+cmgs="); delay_ms(100);
  22.          fprintf(modem,Number); delay_ms(100);
  23.          
  24.          switch (n)
  25.          {
  26.          case 0:
  27.          {
  28.          printf("\r\nHello World!\r\n");
  29.          break;
  30.          }
  31.          default :
  32.          break;
  33.          }
  34.          delay_ms(200);
  35.          putc(26);                                                         //  ctrl + Z
  36.          delay_ms(300);
  37.          return;
  38.          }

Creo que estiempo deiniciarcon el comando

+CMGR: "REC READ","1234567890",,"12/07/30,00:12:05+32" para extraer el numero de la llamada entrante. Claro con la ayuda de KILLERJC :lol:
« Última modificación: 30 de Abril de 2016, 10:22:12 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.