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:
3:0b889f7a8eba
Parent:
2:0377af333c98
Child:
4:dbb0384120e0
--- a/main.cpp	Mon Nov 02 03:25:09 2015 +0000
+++ b/main.cpp	Sun May 08 08:56:40 2016 +0000
@@ -1,10 +1,40 @@
-//  Programa para enviar desde la FRDMKL25Z un mensaje de texto en formatp PDU
-//   Como modem usa un celular SIEMENS a56i
-//   ENVIAR -----la palabra "ALARMA 1"
-//  
-
+/*************************Alarma Contra Robo*********************************************************
+Como modem usa un celular SIEMENS a56i
+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
+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:
+Accionamiento Permanente de una sirena
+Accionaminto temporizado de una sirena
+Accionamiento de un Mensaje de voz reperido y temporizado con un modulo de voz parallax
+puede marcar un telefono fijo y uno de celular e inyectar audio, como voz robotizada a la linea de audio
+usando un modulo GSM/GPRS SIM900 para arduino con entradas y salidas de audio
+puede leer coordenadas de gps y enviarlas con el link de googlemaps.
 //   OJO CON ESTO
 //   conector del siemens cable verde es RX conectelo a PTE0  cable blanco es TX conectelo a PTE1
+
+ESTA ALARMA SE PUEDE PROBAR DE LA SIGUIENTE FORMA
+LOS TELEFONOS ESTAN PREGRAVADOS O CON UN CAMBIO SIMPLE EN EL PROGRAMA EL SISTEMA PUEDE CONTESTAR
+CON EL TELEFONO QUE LO LLAMO
+EN EL CASO DE RASTREADORES
+HAY UN SUICHE QUE SE LLAMA PIR UBICADO EN PTA13..SI SE PULSA POR UN INSTANTE DE TIEMPO
+EL LED VERDE DESTELLA INDICANDO QUE SE ENVIO EL MENSAJE AL NUMERO CODIFICADO EN LA CADENA SEGUN LAS TRAMAS PDU
+ENVIA EL MENSAJE "HAY INTRUSOS EN LA FINCA...."
+
+EN EL CASO DE ENVIAR ORDENES SE DISEÑARON DOS
+SI SE ENVIA UN MENSAJE CON Alarma1 prende el led azul 5 segundos y retorna a verde
+SI se envia el mensaje con Alarma2 prende el led rojo 5 segundos y retorna a verde
+si el telefono falla da indicacion con rojo
+el sistema reintenta de forma infinita la configuracion hasta que lo logra
+*****se verifico que no se de bloqueo y asi resulto bajo intensas pruebas********
+este sistema detecta el mensaje, el tamaño del mensaje y el numero telefonico de quien llama pero etos parametros no se estan usando
+se podrian usar en programas mas complejos como rastreadores satelitales o sistemas de monitoreo de variablees fisicas
+que se consultan por medio de ordenes previas segun algun Mensaje corto.
+
+*/
 #include "mbed.h"
 #include "DebouncedIn.h"
 #include "stdio.h"
@@ -13,6 +43,7 @@
 DigitalOut LedVerde(LED2);
 DigitalOut LedRojo(LED1);
 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 pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado.
@@ -267,68 +298,63 @@
     return 0;
 }
 //************************************************************************************
+//*****************SE INICIA EL PROGRAMA PRINCIPAL*******************************************************
+int main() {
+        //configuramos los puertos seriales    
+        GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600
+        GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART     
+        LedVerde=1;  //APAGO LOS LEDS
+        LedRojo=1;
+        LedAzul=1;
+        LedRojo=0;  // PRENDO EL LED ROJO 
+        //quito el eco del modem
+                
+//****************CONFIGURAMOS EL MODEM GSM (TELEFONO CELULAR SIEMENS A56i)
+inicio1:        
+        ret = init();
+        if(ret==0){
+        LedRojo=1;
+        LedVerde=0;
+        }
+        else{
+        wait(5);
+        goto inicio1;    
+        }
      
 //RUTINA PRINCIPAL*******************************************************************************************
-int main(void)
-       {
-       //configuramos los puertos seriales    
-       GSM.baud(9600);//configura los baudios de la FRDMKL25Z en 9600
-       GSM.format(8,Serial::None,1); //configura el formato de los datos de la UART     
-       //apagamos los 3 leds
-       LedVerde=1;
-       LedRojo=1;
-       LedAzul=1;
-       //quito el eco del modem
-       GSM.printf("ATE0\r\n");
-       pc.printf("ATE0\r\n");
-       for(i=0;i<6;i++){
-          GSM.printf("AT+CMGD=%d\r\n",i);
-          wait(0.2);
-          }
-       //cleanBuffer(buffer,10);
-       //definicion de algunas variables
-       lenpack=6;  //tamaño de "ALARMA"
-       //Configuro el Modem, le doy solo 10 intentos si esos fracasan se bloquea y prende intermitente el led rojo
-inicio:if(init()<0){
-       intentos++;
-       if (intentos==10){goto loop1;}
-       goto inicio;
-       } 
-       //cleanBuffer(buffer,50);
-       //inicia el programa ciclico
-       //esperar señales de alarma por boton1
-       //se envia "Alarma1"
-       //al telefono que envio mensaje antes
-   
+    
 //*********************************************************************************************************************
 while(1){ 
-         if (button1.falling())
+        //***************ALARMA POR ACTIVACION PIR***************************************************         
+       if (PIR.falling())
          { 
-          wait(2);
-           if (!button1)
+          wait(1);
+          if (!PIR)
            {
-           //inicia el envio de un sms    
-           index=19;
-           GSM.printf("AT+CMGS=%d\r\n",index);
-           wait(0.2);
-           GSM.printf("0011000A91");
-           GSM.printf("%s",tel); 
-           GSM.printf("0000AA07417658DE0EC7");
-           GSM.printf("\r\n");
-           wait(0.2);
-           GSM.putc(0x1A); //el mensaje ya fue enviado con esto
-           for(i=0;i<6;i++){
+              
+//**********se envia la palabra "Hay Intrusos En La Finca de Rionegro"
+//******Gustavo        
+        GSM.printf("AT+CMGS=50\n\r");
+        wait_ms(200);
+        GSM.printf("0011000A9113223717370000AA2A21970B19CE83926EBABC3E7FCF41453788190699D3EE7118442E83A4E9B7BB7C96BF5DAE10");
+        wait_ms(200);
+        GSM.putc((char)0x1A);
+        for(i=0;i<6;i++){
                LedVerde=1;
-               wait(0.5);
+               wait(0.2);
                LedVerde=0;
-               wait(0.5);
-               }
-           }
-         }  
-      
+               wait(0.2);
+          }      
+        }
+        }
+// **************apartir de aca se pueden escribir mas alarmas o mensajes de salida activar leds salidas o generar respuestas
+        
+           
 
 
-       //inicia la recepcion de un mensaje de texto
+//***************inicia la recepcion de un mensaje de texto**********************************
+//la comparacion de estos mensajes constituye generar accionamiento abrir o cerrar circuitos o contestar mensajes
+ 
        if (GSM.readable()) {
             readBuffer(buffer,100);
             pc.printf("%s\r\n",buffer);
@@ -361,11 +387,12 @@
                    pc.printf("%s-\r\n",tam);        
                    //leer mensaje
                     for(i=0;i<14;i++){
-                       msg[i]=buffer[i+70];
+                       msg[i]=buffer[i+70];  //OJO SE LEE EL MENSAJE APARTIR DE LA POSICION 70
                    }
                    pc.printf("%s-\r\n",msg);        
                    //decodificar mensaje
                    //comparar mensaje
+                   deleteSMS(1);//se borra el bufer por medio de una funcion
                    if(strcmp("417658DE0EC700",msg) == 0){  //COMPARA resp con "417658DE0EC700" que es Alarma1
                    LedVerde=1;
                    LedAzul=0;
@@ -382,7 +409,7 @@
                    }
                    
                    
-                   //ejecurar orden
+                   //ejecurar orden si esta es mas que prender leds
                    cleanBuffer(buffer,100);
                                
                 }
@@ -399,4 +426,15 @@
        wait(0.3);  
        goto loop1;
  
-}
\ No newline at end of file
+}
+
+/*
+si se manda para enviar mensaje
+AT+CMGS=20
+   //un salto de linea y el simbolo mayor
+> 
+
+
+
+
+*/
\ No newline at end of file