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

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

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #60 en: 31 de Enero de 2011, 19:57:00 »
:-( :-( :-(
Cuando estaba cantando victoria me di cuenta que cometi un error, ya que si me llega un sms que no tenga la palabra R, O u A de ACTIVAR el micro se va a quedar esperando hasta que lleguen cualquiera de esas letras iniciales de las palabras que monitoréo.

:-( Que decepcion y no se como mas hacer  :-(

if(kbhit()){
 do{
 c = getc();
 }while (c!='R'&& c!='O'&& c!='A'); // VERIFICO SI LLEGA UN RING, OK o ACTIVAR (Y si llega otra cosa menos estas letras ??? :-(  )
 while(c!=0x0A){
 buffer[i++] = c;
 c = getc();
 }

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #61 en: 01 de Febrero de 2011, 11:33:06 »
HOLA MLO

Una consulta, esta bien si hago esto ???: Recibir sin interrupciones

void mensajes(){
 datos=0;
 char a=0;
 int k=0,l=0;

 disable_interrupts(GLOBAL);
 disable_interrupts(int_RDA);

printf("AT+CMGR=1\r"); //AQUI LEO EL SMS (RECEPTO SIN INTERRUPCIONES)

//AQUI FILTRO LA PALABRA QUE ME INTERESA Y DESCARTO TODO ESTO: +CMGR: "REC UNREAD","+593xxxxxxxx",,"11/01/27,21:55:34-20" (61 CARACTERES)

 do{
 a = getc();
 k++;
 }while (k!=61);
 
//AQUI RECIBO EL DATO QUE ME INTERESA Y LO ALMACENO EN datos[50]

while(a!=0x0A){
datos[l++] = a;
 a = getc();
 }
 SMS=1;
 clear_interrupt(int_RDA);
 enable_interrupts(GLOBAL);
 enable_interrupts(int_RDA);
}


Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #62 en: 01 de Febrero de 2011, 14:35:52 »
Hola.

Pues yo lo hago teniendo en cuenta el número de veces que llegan los bytes \r y \n, a la primera que llega, no se hace nada, porque el bufer esta vacío, a la segunda vez el bufer no tiene la información que necesito (a menos que quieras verificar el número telefónico) y a la tercera ya verifico el comando.

Saludos
No mismo sale :-(

Podrias poner una parte de codigo de como lo haces ?

Te lo agradeceria mucho.

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #63 en: 01 de Febrero de 2011, 18:12:52 »
Esta es la trama completa de caracteres recibidos, MLO filtra el sms contando los 0D a esto te refieres ???
     
0D\0A+CMGR: "REC READ","+59384073897",,"11/02/01,16:00:17-20"\0D                                     
\0AEl numero 59384378887 ha solicitado que lo llame.\0D                                             
\0A\

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #64 en: 01 de Febrero de 2011, 18:14:39 »
Hola.

Si, mira que al final de cada trama de bytes hay un 0x0D.

Saludos
El papel lo aguanta todo

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #65 en: 01 de Febrero de 2011, 18:16:17 »
Si MLO

Pero no tengo idea como hacerlo :-(

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #66 en: 02 de Febrero de 2011, 00:42:41 »
Si MLO

Pero no tengo idea como hacerlo :-(

Bueno ya poco a poco parece que esta saliendo...

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #67 en: 02 de Febrero de 2011, 12:54:29 »
:-) :-) :-)
Al fin lo logre luego de lidiar mucho con este asunto y gracias a las sugerencias de MLO logré leer el sms los OK y los RING ahora si puedo segir avanzando en mi proyecto.... :-) :-) :-)

Gracias MLO

Saludos
 

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #68 en: 02 de Febrero de 2011, 21:25:11 »
 :-/ :-/

FELICITACIONES!!! No hay nada mejor que lograr las cosas!!!!

Saludos
El papel lo aguanta todo

Desconectado 1Roland1

  • PIC10
  • *
  • Mensajes: 48
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #69 en: 15 de Febrero de 2011, 12:55:30 »
HOLA MLO OTRA VEZ POR ESTE MUNDO DE LOS MICROCONTROLADORES Y EL CCS

TENGO UNA CONSULTA.

A MI PROGRAMA QUIERO AÑADIRLE LA LECTURA Y ESCRITURA DE LA EEPROM INTERNA DEL PIC, OSEA QUIERO PODER GRABAR EN LA EEPROM INTERNA MEDIANTE SMS UN NUMERO O UNA CLAVE PARA HACER QUE ESTA ALARMA SEA PROGRAMABLE Y PODER MODIFICAR LOS NUMEROS TELEFONICOS A LOS QUE QUIERO QUE LLAME AL PRODUCIRSE UN EVENTO. SOLICITO TU AYUDA PARA ESTO. TIENES ALGUNA SUGERENCIA DE COMO HACERLO ??

DE ANTEMANO MIL GRACIAS POR TU AYUDA

SALUDOS

Desconectado vdiazg

  • PIC12
  • **
  • Mensajes: 68
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #70 en: 07 de Marzo de 2011, 19:53:10 »
Si MLO

Pero no tengo idea como hacerlo :-(

Bueno ya poco a poco parece que esta saliendo...

Hola, hace algun tiempo implemente un sistema que enviaba y recibia SMS, te puedo dar unas pautas, la recepcion de datos del movil (SIM340) la hacia por interrupcion del Usart, este modulo GSM cuando recibia una llamada enviaba al PIC la palabra RING, seguida de 0x0D 0X0A y luego enviaba la palabra "OK" 0x0d 0x0A, el detalle es que en la interrupcion del usart solo discriminaba la recepcion del caracter 0x0A que me servia para saber que terminaba de recibir una trama, a continuacion de pongo parte de mi codigo.

#INT_RDA
void recepcion_rxd(){
char rcvchar=0x00;      // último caracter recibido

  if(kbhit()){         // Si hay algo pendiente de recibir ...
    rcvchar=getc();      // lo descargo y ...
    add_2_cbuff(rcvchar); // lo añado al buffer y ...

  }
}



// Añade a cbuff -----------------------
void add_2_cbuff(char c){
  switch(c){
    case 0x0A: // Enter -> Habilita Flag para procesar comando
        cnttrama--;
        if(cnttrama==0){
            flagresp=1;}
    break;
    case 0x0D:
    break;
    case 0x3E:      //simbolo ">" que es la habilitacion para escribir SMS
    break;
    default: // Añade caracter recibido al Buffer
        if (xbuff<=78){
            cbuff[xbuff++]=c;}
        else if ((xbuff>=79)&&(xbuff<=101)){
            smsbuff[(xbuff++)-79]=c;}
        else{
            smsbuff[18]=c;}
      CNTRXD++;
  }
}

//Esto de acontinuacion es parte del programa principal, que tu tendras que adaptarlo, pero que facilmente se entiende.
//los caracteres los recibo en cbuff[], cnttrama es "el contador de tramas" que me indica cuantas veces espero recibir el
//caracter 0X0A
//CNTRXD es el contador de Recepcion de caracteres o bytes.

if((cnttrama==2)&&(cbuff[0]!='R')&&(cbuff[1]!='I')&&(cbuff[2]!='N')&&(cbuff[3]!='G')){
   ver_respuesta(10,709);
   if(flagerror){
   //escribo codigo para cuando no envie ring
   }
   else{
   //escribo codigo para RING
   }
}

// esto es algo similar a la funcion de comparar cadenas, solo que preferi usar una propia
// contador es la cantidad de bytes que comparo (desde el byte numero 0)
// suma, me indica la suma de todos esos bytes, si coinciden solo los caracteres esperados.
// flagerror es un bit que indica se hubo error; si esta en 1 es que hubo error, si esta en 0 esta OK
// led_sal es un led que me indicaba que la respuesta esta OK
// led_est es un led que me indicaba que la respuesta es erronea

void ver_respuesta(int contador,int32 suma){
cont0=0;
    chksuma=cbuff[cont0];
    do{
    chksuma=chksuma+cbuff[cont0+1];
    cont0++;
    }while(cont0<contador-1);

    if (chksuma==suma){
        led_sal=1;
        flagerror=0;
      errcnt=0;
        delay_ms(200);
        led_est=0;
        led_sal=0;}
    else{
        flagerror=1;
        led_sal=0;
        led_est=1;
      errcnt++;
      if ((errcnt>=50)&&(flagsenial==1)){
         init_smsbuff();    // Borra buffer al inicio
         rngcnt=0;
         inactivo=0;
         esperar_ring();         //Vuelvo a esperar los ring.
      }
        delay_ms(200);
        led_est=0;}
    CNTRXD=0;
}

//espero te sirva porque yo lo use sin problemas.
//Cualquier consulta me avisas.
quiero construir un "Condensador de flujos"

Desconectado bacocio

  • PIC10
  • *
  • Mensajes: 4
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #71 en: 14 de Marzo de 2011, 00:00:23 »
hola amigos, hace tiempo que estoy sigueindo este tema y he hecho un programa para recibir y enviar sms, pero quede estancado. El programa funciona, inicia con AT luego lo configua en modo texto, realiza una llamada de prueba y la corta y finalmente envia el comando para que este atento a recibir un mensaje. luego pasa al programa principal que enciende y apaga un led cada 200 ms. esta ahi hasta qe recibe una llamada que envia el comando RING desde el telefono a la pic, ahi deberia encenderse otro led. el problema que en proteus funciona bien pero al momento de implementarlo en la pic no funciona, hace todo pero no llega al parpadeo de los leds.

me podrian ayudar porfavor, les dejo el programa que he hecho. gracias

#include <16f628.h>
#use delay(clock=4000000)
#use rs232 (baud=9600, bits=8, parity=N,xmit=PIN_B2,rcv=PIN_B1)
#include <stdlib.h>
#byte TRISA = 0x85
#byte PORTA = 0x05

#fuses xt,nowdt,nobrownout,nolvp,noprotect // Fusibles

int i;
char dato[3];
char mensaje[6];
char ok[3];

#INT_rda
void rda_isr()//función de interrupción por recepción de datos USART
{
gets(dato);
gets (mensaje);

if(dato[0]=='R'&&dato[1]=='I'&&dato[2]=='N'&&dato[3]=='G') //enciende led
output_high(PIN_A3);
else
output_low(PIN_A3);
return;
}

void main()
{
enable_interrupts(INT_RDA); // Interrupcion RS232
enable_interrupts(INT_EXT); // interrupcion externa
ext_int_edge(H_TO_L); // por flanco de bajada
enable_interrupts(GLOBAL);
disable_interrupts(INT_RDA);
set_tris_a(0x00); // puerto A como salida
OUTPUT_A(0x00); // estabiliza la salida a cero
output_high(PIN_A0);
printf("AT\r\n"); // Le llama la atención al teléfono.
gets(ok);
delay_ms(1000);
printf("AT+CMGF=1\r\n"); // Modo texto
gets(ok);
delay_ms(1000);
printf("ATD87663847;\r\n"); // realiza una llamada telefonica
delay_ms(5000);
delay_ms(5000);
printf("AT+CHUP\r\n"); // corta la llamada.
delay_ms(1000);
printf("AT+CNMI=1,2,0,0,0\r\n"); // espera mensaje
delay_ms(1000);
enable_interrupts(INT_RDA);

while(TRUE)
{
output_high(PIN_A0);
delay_ms(200);
output_low(PIN_A0);
delay_ms(200);
}
}

Desconectado vdiazg

  • PIC12
  • **
  • Mensajes: 68
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #72 en: 14 de Marzo de 2011, 10:51:22 »
Deberias hacer la recepcion de datos byte por byte, en lo personal la funcion gets como que siempre dio problemas, ademas deberias indicar que modulo GSM usas o si es un movil adaptado; en lo personal este proyecto lo hize solo simulandolo con el MPLAB ya que en Proteus el SIM340 que es el que uso, no me permitia simularlo con eficiencia; por ultimo sabias que el MPLAB tambien te permite simular USART y ADC (aunque es un poco abstracto  ;-)).
quiero construir un "Condensador de flujos"

Desconectado bacocio

  • PIC10
  • *
  • Mensajes: 4
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #73 en: 14 de Marzo de 2011, 22:50:31 »
bueno estoy utilizando el nokia 3220.

La simulacion de mplab si la sabia, de hecho cuando programaba en assembler la ocupe para ver donde estaba fallando.

una consulta como podria tomar los caracteres bit a bit?? o como podria ser la rutina para hacer eso..
gracias :)

Desconectado oman

  • PIC10
  • *
  • Mensajes: 14
Re: Recibir un SMS desde un ceular con un pic para controlar dispositivos
« Respuesta #74 en: 10 de Mayo de 2011, 13:13:57 »
Buenas tardes compañeritos.

Estoy realizando un proyecto que consiste en counicar un pic con un nokia 3220 para por medio de sms controlar dispositivos. La comunicacion entre el pic y el celular lo he realizado sin problema puedo generar llamadas o enviar sms desde el pic por medio de este celular y con eso realizar varias aplicaciones. El problema que se me presenta es a la hora de tratar de leer un sms con el pic, estoy programando con ccs pcwhd por eso recurro a ustedes para ver si me pueden orientar con este asunto. Por ejemplo si yo mando un sms con la palabra "ENCENDER"quiero que el pic lea esta palabra y realice la acción del caso.

Saludos Cordiales.
buen dia, me llamo omar. saludos a todos.

estoy haciendo un proyecto pic-nokia 3220 y lla logre la comunicacion por hiperterminal y tambien pic-nokia. mi problema es para enviar mensajes.

encontre un manualito de como hacerlo:
at
ok
at+cmgf=1
ok
at+csca="+358405202000"
ok
at+cmgs="+358407540027"
>my msg
+cmgs: 64

ok
/////////////////////////////////////////////////
pero a la hora de realizarlo con mi numero no logro mandar un mensaje los siguentes datos son un ejemplo de mi intento fallido:

at+csca=? //si soporta este comando
ok
at+csca?
+csca: "+85290000000",145

at+cmgs? // soporta el comando
ok

entonces procedo:
at
ok
at+cmgf=1
ok
at+csca="+526181138485"
ok
at+cmgs="+526181723465"
>my msg
+cms error: 500  //signigica que no lo soporta

pero en los pasos anteriores si lo soportaba, no lo entiendo.

usted mensiona que si lo logro, en verdad necesito su ayuda si es con un ejemplo mucho mejor pero las ayudas en manuales siempre son bienvenidas tambien.

espero que me pueda ayudar.


saludos.














 

anything