![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Tarea del celular, cuidado no funciona
Dependencies: DebouncedIn mbed
Fork of CLASEDELGSM1 by
Diff: main.cpp
- Revision:
- 3:73adce5a8603
- Parent:
- 2:0377af333c98
--- a/main.cpp Mon Nov 02 03:25:09 2015 +0000 +++ b/main.cpp Tue Nov 24 16:56:41 2015 +0000 @@ -2,21 +2,21 @@ // Como modem usa un celular SIEMENS a56i // ENVIAR -----la palabra "ALARMA 1" // - +// OJO EL CODIGO NO FUNCIONA!!!!!! POSIBLEMENTE SEA POR LOS OPERADORES, RECIBE MENSAJES MAS NO ENVÍA! // 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" #include "string.h" -Timer t; +Timer t; //función que sirve para arrancar, parar y crear la medición de pequeños intervalos de tiempo DigitalOut LedVerde(LED2); DigitalOut LedRojo(LED1); DigitalOut LedAzul(LED3); -DebouncedIn button1(PTC12); //señal que inicia el envio del mensaje -Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z +DebouncedIn button1(PTC12); // con el switche iniciamos en envio del mensaje +Serial GSM(PTE0,PTE1); //se configura la interfaz del módem en la tarjeta Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado. -void Rx_interrupt(); +void Rx_interrupt(); // se define la función sin retorno int position=0; int intentos=0; int lenpack=6; @@ -46,7 +46,7 @@ void FlushGSM(void) { char1 = 0; while (GSM.readable()){ - char1 = GSM.getc();} + char1 = GSM.getc();} // se obtienen los datos enviados por el cel return;} void callback() { @@ -59,7 +59,7 @@ //$, count es lo que va a leer.Lo leido lo mete en buffer que es una cadena previamente definida //incorpora medida de tiempo si se demora mas de tres segundos retorna fracaso con -1 //**************************************************************************************************************** -int readBuffer(char *buffer,int count) +int readBuffer(char *buffer,int count) //leeemos todo lo que se encuentre en el buffer { int i=0; t.start(); // start timer @@ -99,7 +99,7 @@ puede ser un comando tipo AT */ //*************************************************************************************** -void sendCmd(char *cmd) +void sendCmd(char *cmd) //comando tipo AT { GSM.puts(cmd); } @@ -273,14 +273,14 @@ { //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 + GSM.format(8,Serial::None,1); //configura el formato de los datos de la transmisión //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"); + pc.printf("ATE0\r\n"); //IMPRIME EN TERMINAL QUE SE BORRA EL ECO for(i=0;i<6;i++){ GSM.printf("AT+CMGD=%d\r\n",i); wait(0.2); @@ -302,20 +302,22 @@ //********************************************************************************************************************* while(1){ - if (button1.falling()) + if (button1.falling()) // cuando se oprima el boton de envio de msj ubicado en PTC12 { wait(2); - if (!button1) + if (!button1) //condición de negado del boton por eje: boton=1--> !boton1=0 { //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); + index=21; + GSM.printf("AT+CMGS=%d\r\n",index); //Envia el encabezado con la longitud de lo que se va a transamitir (INDEX) + wait(0.2); //Espero 0.2 segundos esperando que en terminal salga ">" esperando el mensaje + GSM.printf("0011000A91"); //Pone el primer relleno del mensaje que es el mismo para todos + GSM.printf("%s",tel); //Este identifica el numero que le envio un mensaje con anterioridad (este ya esta invertido por pares) y es colocado luego del primer rello. + GSM.printf("0000AA07417658DE0EC7"); //Aquí esta separado en tres partes, el segundo relleno, la cantidad de septetos+1 y + //el mensaje, en este caso es fijo porque el mensaje es el mismo siempre, de no ser así se separan y se pone en variable + //la cantidad de septetos+1 y el mensaje. + GSM.printf("\r\n");//devuelve el carrier y da enter + wait(0.2); //Esperamos un poco antes de enviar ctrl+z GSM.putc(0x1A); //el mensaje ya fue enviado con esto for(i=0;i<6;i++){ LedVerde=1; @@ -339,11 +341,11 @@ pc.printf("%s\r\n",resp); if(strcmp("$$+CM",resp) == 0){ //COMPARA resp con "+CMTI" - pc.printf("llego MSG\r\n"); - cleanBuffer(buffer,10); + pc.printf("llego MSG\r\n"); //Avisa en pantalla si ha recibido un mensaje mas aun no es comparado + cleanBuffer(buffer,10); //Limpia el buffer wait(0.5); - GSM.printf("AT+CMGL=0\r\n");//envio comando para leer mensaje - pc.printf("AT+CMGL=0\r\n"); + GSM.printf("AT+CMGL=0\r\n");//envio comando para leer mensaje, este abre por así decir la "bandeja de entrada" + pc.printf("AT+CMGL=0\r\n");//Avisa que abrio los mensajes entrantes //if (GSM.readable()) { GSM.printf("AT+CMGD=0\r\n"); readBuffer(buffer,100); @@ -351,9 +353,9 @@ wait(5); //leer telefono for(i=0;i<10;i++){ - tel[i]=buffer[i+40]; + tel[i]=buffer[i+40]; //Con la cadena que llega de la recepcion del mensaje, este toma de ahi el telefono quien le envio SMS } - pc.printf("%s-\r\n",tel); + pc.printf("%s-\r\n",tel); //Imprime el numero telefonico //leer tamaño for(i=0;i<2;i++){ tam[i]=buffer[i+68]; @@ -361,12 +363,13 @@ pc.printf("%s-\r\n",tam); //leer mensaje for(i=0;i<14;i++){ - msg[i]=buffer[i+70]; + msg[i]=buffer[i+70]; //Almacena el mensaje } pc.printf("%s-\r\n",msg); //decodificar mensaje //comparar mensaje if(strcmp("417658DE0EC700",msg) == 0){ //COMPARA resp con "417658DE0EC700" que es Alarma1 + //Como necesitamos un mensaje en especifico, comparamos si el mensaje que llego es igual a Alarma1 (Compara cadena en formato string) LedVerde=1; LedAzul=0; wait(15); @@ -382,8 +385,11 @@ } - //ejecurar orden - cleanBuffer(buffer,100); + //ejecurar orden //ya se ejecuto + //08-D6379B1E569763 esto es Voltaje1 + + + cleanBuffer(buffer,100); //Limpia nuevamente el buffer para futuras recepciones de mas SMS } }