GSM

Dependencies:   DebouncedIn mbed

Fork of CLASEDELGSM1 by Gustavo Ramirez

Files at this revision

API Documentation at this revision

Comitter:
PabloViana
Date:
Fri Nov 20 14:49:29 2015 +0000
Parent:
2:0377af333c98
Commit message:
GSM

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Nov 02 03:25:09 2015 +0000
+++ b/main.cpp	Fri Nov 20 14:49:29 2015 +0000
@@ -1,10 +1,3 @@
-//  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"
-//  
-
-//   OJO CON ESTO
-//   conector del siemens cable verde es RX conectelo a PTE0  cable blanco es TX conectelo a PTE1
 #include "mbed.h"
 #include "DebouncedIn.h"
 #include "stdio.h"
@@ -271,13 +264,15 @@
 //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
+       //apagamos los 3 leds       
        LedVerde=1;
        LedRojo=1;
        LedAzul=1;
+       wait(5);
        //quito el eco del modem
        GSM.printf("ATE0\r\n");
        pc.printf("ATE0\r\n");
@@ -285,105 +280,131 @@
           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
-   
+    //Se intenta inicializar el módulo, en caso de que supere 10 intentos se termina el programa;
+        while(init()<0)
+        {
+            intentos++; if (intentos==10){pc.printf("El programa terminara...\n\r");LedRojo=0;return 0;}
+        }
+
+wait(1);
+LedVerde=1; //Apgo el led verde;
+pc.printf("El sistema está listo para iniciar la recepción de SMS\n\r");   
 //*********************************************************************************************************************
 while(1){ 
-         if (button1.falling())
-         { 
-          wait(2);
-           if (!button1)
-           {
-           //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++){
-               LedVerde=1;
-               wait(0.5);
-               LedVerde=0;
-               wait(0.5);
-               }
-           }
-         }  
-      
-
+         
 
        //inicia la recepcion de un mensaje de texto
        if (GSM.readable()) {
             readBuffer(buffer,100);
-            pc.printf("%s\r\n",buffer);
+            wait(0.2);
             for(i=0;i<5;i++)
             {
-            resp[i]=buffer[i];
+                resp[i]=buffer[i];
             }  
              
-            pc.printf("%s\r\n",resp);
+            wait(0.2);
+            
             if(strcmp("$$+CM",resp) == 0){  //COMPARA resp con "+CMTI"
-                pc.printf("llego MSG\r\n");
+                
+                pc.printf("Nuevo mensaje de texto\r\n");
+                
                 cleanBuffer(buffer,10);
+                
                 wait(0.5);
+                
                 GSM.printf("AT+CMGL=0\r\n");//envio comando para leer mensaje
+                
                 pc.printf("AT+CMGL=0\r\n");
-                //if (GSM.readable()) {
-                GSM.printf("AT+CMGD=0\r\n");    
+                
+                GSM.printf("AT+CMGD=0\r\n"); 
+                   
                 readBuffer(buffer,100);
+                
+            
                 pc.printf("%s\r\n",buffer);
+                
                 wait(5);
                    //leer telefono
                 for(i=0;i<10;i++){
                        tel[i]=buffer[i+40];
                        }
-                pc.printf("%s-\r\n",tel);        
+                pc.printf("Remitente: %s\r\n",tel);        
+                
                 //leer tamaño
                    for(i=0;i<2;i++){
                        tam[i]=buffer[i+68];
                    }
-                   pc.printf("%s-\r\n",tam);        
+                        
                    //leer mensaje
                     for(i=0;i<14;i++){
                        msg[i]=buffer[i+70];
                    }
-                   pc.printf("%s-\r\n",msg);        
-                   //decodificar mensaje
-                   //comparar mensaje
-                   if(strcmp("417658DE0EC700",msg) == 0){  //COMPARA resp con "417658DE0EC700" que es Alarma1
-                   LedVerde=1;
-                   LedAzul=0;
-                   wait(15);
-                   LedAzul=1;
-                   LedVerde=0;
-                   }
-                   if(strcmp("417658DE0ECB00",msg) == 0){  //COMPARA resp con "417658DE0ECB00" que es Alarma2
-                   LedVerde=1;
-                   LedRojo=0;
-                   wait(15);
-                   LedRojo=1;
-                   LedVerde=0;
+                   pc.printf("Mensaje Recibido: %s\r\n",msg);     
+                   
+                   
+                   cleanBuffer(buffer,100); //Limpiar Buffer;
+                   
+                   pc.printf("\n\r");
+                   
+                   if(strcmp("CB347D8C2EBB01",msg) == 0) //Envío la palabra Kitchen - Despliego en pantalla 
+                   {
+                        pc.printf("Se verificara el estado de las hornillas y se apagaran las que esten encendidas\r\n");
+                        //Cómo se reconoce la palabra Kitchen, entonces se envía la palabra OK como respuesta;
+                        GSM.printf("AT+CMGS=15\r\n");
+                        wait(0.2);
+                        GSM.printf("0011000A91");
+                        pc.printf("0011000A91");
+                        GSM.printf("%s",tel); 
+                        pc.printf("%s",tel); 
+                        GSM.printf("0000AA03CF35");
+                        pc.printf("0000AA03CF35\n\r");
+                        GSM.putc((char)0x1A); //ctrl-z
+                        LedAzul =0;wait(2);LedAzul=1; //Enciendo y apago el led Azul paara indicar que  se realiza una instrucción;
                    }
                    
+                   else if(strcmp("C672990C2FD301",msg) == 0) //Envío la palabra Feedpet
+                   {
+                       pc.printf("Se activara el sistema de alimentacion automatico de mascotas...\r\n");
+                       
+                       //Se reconoce la instrucción FeedPet, se responde OK;
+                        GSM.printf("AT+CMGS=15\r\n");
+                        wait(0.2);
+                        GSM.printf("0011000A91");
+                        GSM.printf("%s",tel); 
+                        GSM.printf("0000AA03CF35");
+                        GSM.putc((char)0x1A); //ctrl-z
+                        LedAzul =0;wait(2);LedAzul=1; //Enciendo y apago el led Azul paara indicar que  se realiza una instrucción;
+                       
+                    }
                    
-                   //ejecurar orden
-                   cleanBuffer(buffer,100);
+                   
+                   else if(strcmp("C872985E96C700",msg) == 0) //Envío la palabra Heater1;
+                   {
+                       pc.printf("Se activara el sistema de calefaccion...\r\n");
+                        //Se Reconoce la instrucción Heater1, se responde Ok.
+                        GSM.printf("AT+CMGS=15\r\n");
+                        wait(0.2);
+                        GSM.printf("0011000A91");
+                        GSM.printf("%s",tel); 
+                        GSM.printf("0000AA03CF35");
+                        GSM.putc((char)0x1A); //ctrl-z  
+                        LedAzul =0;wait(2);LedAzul=1; //Enciendo y apago el led Azul paara indicar que  se realiza una instrucción;                    
+                    
+                    }
+                   else {
+                               pc.printf("No se reconoce ninguna instruccion...\n\r");
+                        //No se reconoce ninguna instrucción se responde con la palabra Again;                    
+                        GSM.printf("AT+CMGS=18\r\n");
+                        wait(0.2);
+                        GSM.printf("0011000A91");
+                        pc.printf("PUD: 0011000A91");
+                        GSM.printf("%s",tel); 
+                        pc.printf("%s",tel);
+                        GSM.printf("0000AA06C17338ED06\r\n");
+                        pc.printf("0000AA06C17338ED06\r\n");                        
+                        GSM.putc((char)0x1A); //ctrl-z 
+                        LedRojo =0;wait(2);LedRojo=1; //Enciendo y apago el led rojo paara indicar que no se reconoce la instrucción;
+                        }   //Ninguna orden reconocida;                
                                
                 }
             }
@@ -391,12 +412,7 @@
 
         }
 
+    
 
-//**********************************************************************************************************************           
-loop1: LedRojo=0;
-       wait(0.3);
-       LedRojo=1;
-       wait(0.3);  
-       goto loop1;
  
 }
\ No newline at end of file