# MOdulo Gsm y pic18f4550



## zhipirilo (Ago 9, 2012)

En general el proyecto esta asi...


Mediante un mensaje de texto, recivido por el modulo gsm (todavia no se cual usar) i conectado a un pic aga una activacion de relays es para un reset de maquinaria por medio de GSM!

quiero saber si el modulo puede recivir mensajes i si puedo filtrar ciertos contenidos de mensajes para usarlos como comando de activacion de cada relay!


----------



## albertoxx (Ago 9, 2012)

Como modulo GSM puedes usar un telefono celular con conexion serial (de los viejos) luego con el pic manejas por medio de comandos AT el envio o recepcion de mensajes luego con esos mensajes desde el pic abres y cierras los reles


----------



## cal (Ago 26, 2012)

muy bien albertoxx y zpirilo
yo probe con el SE k300 el problema ocn ese celu es que no domina formato texto
at+cmgf=1                //foramato texto
error cmgf 302           //
at+cmgf=?
:+cmgf (0)            //solo formato pdu

hasta alli  bien ahora estube buscando ejemplos de reconocimiento de una cadena en PDU con librerias en el ccs <string.h> o <strcmp.h> y el problea ahora es que en una comparacion el programa se queda en la linea:

char varable[4];                                     //para 4 caracteres puntero inicializado en '0'
gets(variable);                                //aqui
    if (strcmp(variable,password)==0);
       printf("clave correcta");
    esle printf("clave incorrecta");
whlile(!strcmp(variable,password));
//todo en un bucle infinito

ahora encontre otro detalle 
como puedo comparar una cadena de octetos (sms_pdu como "sensor_puerta_on") que tiene mas de 30 octetos?

si alguien a trabajado con comparaciones en ccs para formato PDU 
por fa una ayuda 
de ante mano mil gracias


----------



## albertoxx (Ago 26, 2012)

Busca funciones que conviertan un mensaje en formato PDU aqui hay una pagina  que lo hace en linea http://www.smartposition.nl/resources/sms_pdu.html#PDU_CONVERTER pero seria que buscaras una pagina donde este el codigo fuente o tambien la puedes hacer solo que manejes bien las conversiones hexadesimales, tendrias que usar algo asi:

printf("AT+CMGL=4");
gets(respuesta);
strcpy(MensajeDecodificado,FuncionDecodificadora(respuesta));

if( strcmp(MensajeDecodificado,"APAGALED") == 0 ){
   output_low(pin_a1);
}
if( strcmp(MensajeDecodificado,"APAGALED") == 0 ){
   output_high(pin_a2);
}

Repito es solo para que te des una idea, faltarian bastantes comandos mas: el que te selecciona de que memoria vas a leer el mensaje, el que te borre el mensaje luego de que lo procesaste, la funcion que te verifique que el modem te contesto bien, sino lo vas a dejar en un loop infinito etc....


----------

