este programa recibe ordenes codificadas en mensajes de texto y envia mensajes cuando pulsan un boton use Alarma1 y Alarma2 de prueba...regresa por pulsador Alarma1. captura el numero de telefono de quien manda la orden

Dependencies:   DebouncedIn mbed

Fork of CLASEDELGSM by Gustavo Ramirez

Este programa se probo y valido verificando que no se bloquea salvo se quede sin credito la SIMCARD se puede adaptar a cualquier aplicación de telemetría GSM o GPRS, ya que las funciones de librería lo permiten. Se adapta fácil a un rastreador satelital o monitoreo de variables si se usan los programas PDU1 y PDU2 para pasar entre octetos y septetos y viceversa.

baje el programa de abajo para determinar cadenas completas PDU en modo Hex y determine sus propias claves use el menú mandos del teléfono/enviar mensajes. Este programa monitorea completamente la actividad del modem facilitandonos la apropiación de la dinámica de codificación de mensajes PDU

/media/uploads/tony63/movilon.rar

/media/uploads/tony63/movilon1.png

puede bajar también TERMITE

http://www.compuphase.com/software_termite.htm

ejecutarlo con privilegios de administrador

baje este documento donde explico bastante como se codifica en PDU y multiples ejemplos y experimentos con el modem GSM/GPRS

/media/uploads/tony63/practicassms.rar

Revision:
5:4cece0df6a3b
Parent:
4:dbb0384120e0
Child:
6:08dac00ecff7
--- a/main.cpp	Tue May 10 10:08:40 2016 +0000
+++ b/main.cpp	Tue May 10 12:52:36 2016 +0000
@@ -1,9 +1,9 @@
-/*************************Alarma Contra Robo*********************************************************
-Como modem usa un celular SIEMENS a56i
+/*************************Alarma Contra Robo*******ver:01.may 10 2016 **************************************************
+Como modem usa un celular SIEMENS a56i (ver compatibilidad mandos AT otros modems)
 Envia el mensaje intruso y otras cosas (mire el codigo de abajo)
 Como modem GSM usa un celular SIEMENS A56i
 El conector se distingue asi: 
-Cable verde es RX conectelo a PTE0  cable blanco es TX conectelo a PTE1
+Cable verde es RX conectelo a PTE0  cable blanco es TX conectelo a PTE1 (placa FRDMKL25Z de NXP antes freescale)
 La alarma se dispara segun la señal digital de entrada de un sensor PIR que se le filtra el ruido por medio de
 una validacion por retardo
 La alarma puede hacer accionamientos como:
@@ -42,11 +42,15 @@
 Timer t;
 DigitalOut LedVerde(LED2);
 DigitalOut LedRojo(LED1);
-DigitalOut camara(PTE5 );
+DigitalOut camara(PTE20 );
+DigitalOut sirena(PTE21 );
+DigitalOut luces(PTE22 );
+DigitalOut audio(PTE23 );
 DigitalOut LedAzul(LED3);
 DebouncedIn PIR(PTA13);  //señal que inicia el envio del mensaje
 DebouncedIn button1(PTC12);  //señal que inicia el envio del mensaje
-Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z
+Serial GSM(PTE0,PTE1); //Configura puerto UART1 de la FRDMKL25Z
+Serial voz(PTA2,PTA1); //Configura puerto UART0 de la FRDMKL25Z
 Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado.
 void Rx_interrupt();
 int position=0;
@@ -254,10 +258,10 @@
     if (0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 3)){
         return -1;
         }
-    if (0 != sendCmdAndWaitForResp("AT+CBST=0,0,1\r\n", "OK", 3)){
+    if (0 != sendCmdAndWaitForResp("AT+CBST=7,0,1\r\n", "OK", 3)){ //velocidad fija a 9600, modem asincronico no transparente
         return -1;
         }
-    if (0 != sendCmdAndWaitForResp("ATE\r\n", "OK", 3)){
+    if (0 != sendCmdAndWaitForResp("ATE\r\n", "OK", 3)){ //se le quita el eco al modem GSM
         return -1;
         }
         LedVerde=0;
@@ -301,6 +305,17 @@
     sendCmd(cmd);
     return 0;
 }
+//********Esta funcion devuelve la confirmacion del mensaje a quien lo envio**************************
+int recibe_ok(){
+        GSM.printf("AT+CMGS=32\n\r");
+        pc.printf("AT+CMGS=32\n\r");
+        wait_ms(200);
+        GSM.printf("0011000A91%s0000AA15CDB27B1E569741F2F2382D4E93DFA0E7321402",tel);
+        pc.printf("0011000A91%s0000AA15CDB27B1E569741F2F2382D4E93DFA0E7321402",tel);
+        wait_ms(500);
+        GSM.putc((char)0x1A);
+        return 0;
+        }
 //************************************************************************************
 //*****************SE INICIA EL PROGRAMA PRINCIPAL*******************************************************
 int main() {
@@ -396,8 +411,11 @@
                    pc.printf("%s-\r\n",msg);        
                    //decodificar mensaje
                    //comparar mensaje
-                   deleteSMS(1);//se borra el bufer por medio de una funcion
+                   deleteSMS(1);//se borra los mensajes por medio de una funcion
+                   readBuffer(buffer,200);
+                   readBuffer(buffer,200);
                    if(strncmp("417658DE0EC700",msg,14) == 0){  //COMPARA resp con "417658DE0EC700" que es Alarma1
+                   recibe_ok();
                    LedVerde=1;
                    LedAzul=0;
                    wait(15);
@@ -405,6 +423,7 @@
                    LedVerde=0;
                    }
                    if(strncmp("417658DE0ECB00",msg,14) == 0){  //COMPARA resp con "417658DE0ECB00" que es Alarma2
+                   recibe_ok();
                    LedVerde=1;
                    LedRojo=0;
                    wait(15);
@@ -412,16 +431,40 @@
                    LedVerde=0;
                    }
                    if(strncmp("C3703B2C0F83DE6E",msg,16) == 0){  //COMPARA resp con "417658DE0ECB00" que es Camara on
+                   recibe_ok();
                    camara=1;
                    }
                    if(strncmp("C3703B2C0F83DE66",msg,16) == 0){  //COMPARA resp con "417658DE0ECB00" que es Camara of
+                   recibe_ok();
                    camara=0;
                    }
                    if(strncmp("D3B4BCEC0E83DE6E",msg,16) == 0){  //COMPARA resp con "D3B4BCEC0E83DE6E" que es Sirena on
-                   camara=0;
+                   recibe_ok();
+                   sirena=1;
+                   wait(30);                        //prende la sirena 30 segundos
+                   sirena=0;
+                   }
+/*                 if(strncmp("        ",msg,16) == 0){  //COMPARA resp con " " que es luz on
+                   recibe_ok();
+                   luces=1;
+                   wait(30);                        //prende la luz 30 segundos
+                   luces=0;
                    }
+                   if(strncmp(" ",msg,16) == 0){  //COMPARA resp con "" que es Msg1
+                   recibe_ok();
+                   }
+                   if(strncmp(" ",msg,16) == 0){  //COMPARA resp con "" que es Msg2
+                   recibe_ok();
+                   }  
+                   if(strncmp(" ",msg,16) == 0){  //COMPARA resp con "" que es Msg3
+                   recibe_ok();
+                   }
+                   if(strncmp(" ",msg,16) == 0){  //COMPARA resp con "" que es Msg123
+                   recibe_ok();
+                   }
+*/                   
                    //strncmp(str1, str2, 6) compara hasta 6 caracteres
-                   
+                   //recibe_ok();
                    
                    //ejecurar orden si esta es mas que prender leds
                    cleanBuffer(buffer,100);
@@ -483,7 +526,23 @@
 mensaje=417658DE0E8362
 5
 
+Mensaje recibido ok!
+AT+CMGS=31
+0011000A9113223717370000AA14CDB27B1E569741F2F2382D4E93DFA0F73A04
+
+AT+CMGS=32
+0011000A9113223717370000AA15CDB27B1E569741F2F2382D4E93DFA0E7321402
 
 
 
+void recibe_ok(void){
+        GSM.printf("AT+CMGS=31\n\r");
+        wait_ms(200);
+        GSM.printf("0011000A91");
+        GSM.printf("%str",tel);
+        GSM.printf("0000AA14CDB27B1E569741F2F2382D4E93DFA0F73A04\n\r"); // Mensaje recibido ok!
+        wait_ms(200);
+        GSM.putc((char)0x1A);
+        }
+
 */
\ No newline at end of file