Rudy Leal
/
mbed_celular
gps_celular
main.cpp
- Committer:
- Rudyedisonlealgarces
- Date:
- 2015-06-26
- Revision:
- 1:df85900c7dc4
- Parent:
- 0:5332dcc305cd
File content as of revision 1:df85900c7dc4:
#include "mbed.h" #include "GPS.h" #include "string.h" #include "stdio.h" #include "stdlib.h" Serial gsm(PTE0,PTE1); // Se declaran puertos para la comunicacíón GSM Serial pc(USBTX,USBRX); // Puerto seríal de la Freescale para el envio de datos GPS gps(PTD7, PTD6); DigitalOut myled(LED1); char buf[100], bufm[18], tam[2], pdu[]=""; // Variables para almacenar las cadenas de caracteres int i,K,C,LENOUT,LENIN; char ME[]="ME"; char DE[255]; char DS[255]; char vector_1[]=""; char vector_2[]=""; float lo,la; char trama[100]={"0691136249209211000A9103700479590000AA03C3B71C"}; // codigo de mi celular en pdu char LINK[]={"http://maps.google.com/?q="}; // GOOGLE MAPS char ENV[]="0011000A9113382624970000AA"; int main() { // Configuración para la comunicacion con el celular //haciendo pruebas con el programa Termite con el codigo AT gsm.baud(9600); // Configuracion de la velocidad de comunicación gsm.format(8,Serial::None,1); pc.printf("Enviamos AT \n"); //imprima en la pantalla del computador gsm.printf("AT\r\n"); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); wait(1); gsm.printf("AT+CNMI=1,1\r\n"); pc.printf("AT+CNMI=1,1\r\n"); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); wait(1); gsm.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\r\n"); pc.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\n"); gsm.scanf("%s",buf); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); wait(1); gsm.printf("AT+CMGF=0\r\n"); pc.printf("AT+CMGF=0\r\n"); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); gsm.printf("CBST=0,0,1\r\n"); //ingreso al while para esperar el mensaje while(1) { pc.printf("\n Esperar_Mensaje \n"); gsm.scanf("%s",buf); pc.printf("%s",buf); i = strlen(buf); //entro en el while hasta que se cumpla alguna de estas 3 condiciones if(i>3){ pc.printf("Llego un Mensaje \n"); gsm.printf("AT+CMGR=1 \r\n"); // lee el mensaje que esta entrando gsm.scanf("%s",buf); //borro primer mensaje acumulado gsm.scanf("%s",buf); //borro segundo mensaje acumulado gsm.scanf("%s",buf); //borro tercer mensaje osea que limpio la memoria del celular gsm.scanf("%s",buf); //para que pueda leer el primero y no los acumulados pc.printf(">%s",buf); //Mostrar en PDU del mensaje leido. i = strlen(buf); // compara la cadena de Pdu que ha llegado if(i==56){ pc.printf("\n LLego on"); myled = 0; //encienda el led gsm.printf("AT+CMGD=1\r\n"); gsm.scanf("%s",buf); pc.printf("\n%s\n",buf); }//if de on if(i==58){ pc.printf("\n LLego off"); myled = 1; //apague el led gsm.printf("AT+CMGD=1\r\n"); gsm.scanf("%s",buf); //escaneo el mensaje pc.printf("\n%s\n",buf);// aquí certifico que he boorado el mensaje }//if de off if(i==62){ //llegó elmensaje "cord" gsm.format(8,Serial::None,1); // 8 bit sin paaridad pc.printf("gsm.format(8,Serial::None,1)\n"); pc.printf("Enviamos AT\n"); gsm.printf("AT\r\n"); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); gsm.printf("AT+CMGR=1\r\n"); // Se lee el menjsae que ente en el indice 1. pc.printf("AT+CMGR=1\r\n"); gsm.scanf("%s",buf); gsm.scanf("%s",buf); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf(">%s\n",buf); pc.printf("gps \n"); while(1) { i=0; if(gps.sample()& i==0) { // ingresa sí recibe datos del sagem si no quedarse pc.printf("Comienza el gps \n"); //Toma de datos del gps y concatenacion para armar los datos. la=gps.longitude; lo=gps.latitude; sprintf(vector_1, "%f", lo);//cojo variable "lo" la guardo en vector1 con propiedad flotante strcat(LINK,vector_1);// utilizo para concatenar , en link (GOOGLE MAPS)pego lo q esta en vector1 strcat(LINK,","); // concateno una coma para separar los datos mostrados sprintf(vector_2, "%f", la); strcat(LINK,vector_2); strcat(DE,LINK); // variable del profesor que pasa de caracteres a pdu pc.printf("%s\n",LINK); LENIN=strlen(DE); // combierto los datos a Pdu K=0;C=0; for (i=0;i < LENIN;i++){ DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K); if (DS[i]==0x00) {LENOUT=i; goto salir;}// cambia de sextetos a octetos K++; if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits } salir: pc.printf("DE\n"); for (i=0;i < LENIN;i++){ pc.printf("%X",DE[i]); } pc.printf("\n DS \n");// guardo la i esima posición en pantalla for (i=0;i<LENOUT;i++){ pc.printf("%02X",DS[i]&0x000000FF);// imprimo con el comando %02X } pc.printf("\n LENOUT:%d,LENIN:%d\r\n",LENOUT,strlen(DE));// longitud de la trama Pdu // el mensaje pc.printf("Comienza SMS \n"); gsm.printf("AT+CMGS=53\r\n"); pc.printf("\n AT+CMGS=53\r\n"); wait(1); gsm.printf("0011000A9113382624970000AA"); pc.printf("0011000A9113382624970000AA"); wait(1); gsm.printf("%2X",LENOUT);// imprima el valor hexagesima en celular pc.printf("%2X",LENOUT); //imprima el valor hex en computador for (i=0;i < LENOUT;i++){ gsm.printf("%02X",DS[i]&0x000000FF); pc.printf("%02X",DS[i]&0x000000FF); wait(0.3); } gsm.putc((char)0x1A); gsm.scanf("%s",buf); gsm.scanf("%s",buf); pc.printf("\n lo que devuelve el cel %s \n",buf);// compruebo que ha llegado el mensaje i=1; gsm.printf("AT+CMGD=1\r\n"); //borro mensaje para que quede limpio memoria del celular pc.printf("\n Se sale de while para la lectura de gps \n "); gsm.scanf("%s",buf); pc.printf(">%s",buf); goto esp; } }//if de coord }// if de llegada de SMS esp: gsm.scanf("%s",buf); pc.printf("%s",buf); }//devuelvo al while }// lleva al menú principal }