Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- procesadores_FAC
- Date:
- 2015-06-19
- Revision:
- 0:b2a6aa7c0c8c
- Child:
- 1:e2bd083802c0
File content as of revision 0:b2a6aa7c0c8c:
//programa para celular siemens que recibe un mensaje de texto t activa una salida en formato
//pdu hex
#include "mbed.h"
#include "DebouncedIn.h"
#include "stdio.h"
#include "string.h"
#include "GPS.h"
Timer t;
DigitalOut LedVerde(LED2);
DigitalOut LedRojo(LED1);
DigitalOut LedAzul(LED3);
///////////////////////////////////////////
Serial GSM(PTE0,PTE1); //puertos del FRDM para el modem
Serial pc(USBTX,USBRX);
GPS gps(PTE22, PTE23); // Puerto del FDRM para el gps
////////////////////////////
//PARAMETROS
////////////////////////////////
short DE[255];
short DS[255];
char buffer[512];
char buffermsg[100];
char buffer1[13];
char mensaje[100];
int count;
int i,K,LENOUT,LENIN,C;
char Tel[15];
char cel[15];
char ojala[15]; // OJO
int c=0;
int cont=0;
unsigned char CtrlZ = 0x1A;
bool Flag = false;
char r[]="";
char msg[256];
char char1;
int index;
//////
//longitud y latitud
////
float lo,la;
char clo[255], cla[255]; //
int LENINlo,LENINla,LENINla_lo;
char la_lo[255];
char http2[255];
char http[] = "http://maps.google.com/maps?q=";
//////////////
// convercion oct sept
////////////
int iht,Kht,ChtLENOUTht,LENINht;
int ioct,Koct,LENOUToct,LENINoct,Coct;
char DEoct[255];
char DSoct[255];
char buf[100];
/////////////////////////
//cocanteo rellenos y numero
//////////////////////////
char relle1[]= "0011000A91";
char relle2[]= "10000AA";
char relle3[]= "68";
/////////////////////////////////////////////
// funciones
////////////////////////////////////////////
int readBuffer(char *buffer,int count)
{
int i=0;
t.start();
while(1) {
while (GSM.readable()) {
char c = GSM.getc();
if (c == '\r' || c == '\n') c = '$';
buffer[i++] = c;
if(i > count)break;
}
if(i > count)break; // ojooo
if(t.read() > 3) {
t.stop();
t.reset();
break;
}
}
wait(0.5);
while(GSM.readable()) {
char c = GSM.getc();
}
return 0;
}
///////////////////////////////////////////////
//Programass
///////////////////////////////////////////////
int main(void)
{
LedVerde=1;
LedRojo=1;
LedAzul=1;
GSM.baud(9600);
GSM.format(8,Serial::None,1);
GSM.printf("AT\r\n");
wait(0.5);
GSM.printf("AT+CNMI=1,1\r\n");
wait(0.5);
GSM.printf("AT+CMGF=0\r\n");
wait(0.5);
GSM.printf("ATE\r\n");
wait(0.5);
GSM.printf("CBST=0,0,1\r\n");
wait(0.5);
while(1){
if (GSM.readable()) {
readBuffer(buffer,100);
pc.printf("buffer= %s\n\r ",buffer);
pc.printf("buffer= %c %c\n\r ",buffer[10],buffer[11]);
if(buffer[67]=='A'){for(i=0;i<86;i++)
{buffermsg[i]=buffer[i];}
pc.printf("mensaje= %s\n\r ",buffermsg);
pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]);
buffer[67]='c';
if (buffermsg[69] == '2'){ // PARA CUANDO LA CLAVE ES On
LENIN=2; //numero de caracteres de abajo son los octetos
DE[0]=0x47;
DE[1]=0x37;
}
if (buffermsg[69] == '3'&& buffermsg[70] == '4'){ // PARA CUANDO LA CLAVE ES Off
LENIN=3; //numero de caracteres de abajo son los octetos
DE[0]=0x4F;
DE[1]=0xB3;
DE[2]=0x19;
}
if (buffermsg[69] == '3'&& buffermsg[70] == 'C'){ // PARA CUANDO LA CLAVE ES Cor
LENIN=3; //numero de caracteres de abajo son los octetos
DE[0]=0xC3;
DE[1]=0xB7;
DE[2]=0x1C;
}
LENOUT= LENIN*8/7;
K=7;
C=0;
DS[0]=DE[0] & 0x7F; // la primera sola
pc.printf("%2X\n",DS[0]);
for (i=1;i < LENOUT;i++){ // inicia el algoritmo
DS[i]=(DE[i-1-C]>>K | DE[i-C]<<(8-K))& 0x7F; //valido para todos
pc.printf("%2X\n",DS[i]);
if (K==0) {K=8;C++;}
K--;
}
for (i=0 ;i<=9;i++)
{
Tel[i] = buffermsg[40+i];
}
pc.printf("\n");
pc.printf("%c%c%c%c%c%c%c%c%c%c",Tel[1],Tel[0],Tel[3],Tel[2],Tel[5],Tel[4],Tel[7],Tel[6],Tel[9],Tel[8]);
}
if(buffer[10]=='S'&& buffer[11]=='M'){
for(i=0;i<5;i++)
{buffer1[i]=buffer[2+i];}
pc.printf("buffer1= %s\n\r ",buffer1);
buffer[10]='c';
buffer[11]='c';
}
if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r");
wait(0.5);
GSM.printf("AT+CMGL=0\r\n");
buffer1[3]='p';
}
if(DS[0]-67 == 0&& DS[1]-111==0) // Cor en octetos es 436f72
{
pc.printf("\n");
LedAzul=0;
DS[0] = '\0';
DS[1] = '\0';
if(gps.sample())
{
lo =gps.longitude;
la =gps.latitude;
pc.printf("longitud_entera=%f, Latitud entera=%f\n", lo, la);
wait(0.5);
//LONGITUD/
sprintf (clo, "%f", lo);
pc.printf ( "\nlongitud = %s\n",clo);
LENINlo=strlen(clo);
/* for (ilo=0;ilo<LENINlo;ilo++){
pc.printf("%c,",clo[ilo]);
} */
wait(0.5);
//LATITUD/
sprintf (cla, "%f", la);
pc.printf ( "\nlatitud = %s\n",cla);
LENINla=strlen(cla);
/*for (ila1=0;ila1<LENINla1;ila1++){
pc.printf("%c,",cla[ila1]);
}*/
///////////////////////////////////////////////////
// CONCATENO LONGITUD Y LATITUD
///////////////////////////////////////////////////
strcpy(la_lo,cla);
strcat(la_lo,",");
strcat(la_lo,clo);
pc.printf ( "\nla_lo: %s\n",la_lo);
LENINla_lo=strlen(la_lo);
/*for (j=0;j<LENINla_lo;j++){
pc.printf("%c\n",la_lo[j]);
}*/
////////////////////////////////////////////////////////
// CONCATENO LONGITUD, LATITUD Y EL http//:
////////////////////////////////////////////////////////
strcpy(http2,http);
strcat(http2,la_lo);
pc.printf ( "%s\n",http2);
pc.printf ( "\n" );
//////////////////////////////////////////////////////////////////////
// convierto http2 de oct a sep
////////////////////////////////////////////////////////////////////////
LENINht=strlen(http2);
pc.printf("%d\n",LENINht);
for (iht=0;iht<LENINht;iht++){
pc.printf("%2X",http2[iht]);
}
pc.printf ( "\n" );
/////////////////////////////////////
LENINoct=strlen(http2);
pc.printf("%d\n",LENINoct);
for (ioct=0;ioct<LENINoct;ioct++)
{
DEoct[ioct]=http2[ioct];
pc.printf("%2X,%d\n",DEoct[ioct],ioct);
}
////////////////////////////////////////
Koct=0;
Coct=0;
for (ioct=0;ioct < LENINoct;ioct++)
{
DSoct[ioct]=DEoct[ioct+Coct]>>Koct | DEoct[ioct+Coct+1]<<(7-Koct);
if (DSoct[ioct]==0x00){
LENOUToct=ioct;
pc.printf("\n");
pc.printf("%s",DEoct);
pc.printf("out =%d",LENOUToct);
for (ioct=0;ioct<LENOUToct;ioct++){
pc.printf("%2X,%d\r\n",DSoct[ioct]&0x000000FF,ioct);
}
}
// pc.printf("LENOUT:%d,LENIN:%d\r\n",LENOUToct,strlen(DEoct));
//}
Koct++;
if (Koct==7)
{
Koct=0;Coct++;
} // se chequea que ya se acabaron los bits en un ciclo de conversion.
}
/////////////////////////////////////////////////////////
// CONCATENO LOS RELLENOS Y EL NUMERO DEL CELULAR
////////////////////////////////////////////////////////
wait(5);
index=56;
GSM.printf("AT+CMGS=%d\r\n",index);
pc.printf("AT+CMGS=%d\r\n",index);
pc.printf("0011000A91");
GSM.printf("0011000A91");
for (i=0 ;i<=9;i++)
{
pc.printf("%c",Tel[i]);
GSM.printf("%c",Tel[i]);
}
pc.printf("10000AA");
GSM.printf("0000AA");
pc.printf("31");
GSM.printf("31");
for (ioct=0;ioct<=((LENOUToct*7)/8);ioct++)
{
pc.printf("%02X",DSoct[ioct]);
GSM.printf("%02X",DSoct[ioct]);
}
wait(0.5);
GSM.putc((char)0x1A);
GSM.scanf("%s",buf);
GSM.scanf("%s",buf);
GSM.scanf("%s",buf);
//GSM.scanf("%s",buf);
pc.printf(">%s\n",buf);
pc.printf("\n");
} // if
}
if(DS[0]-79==0 && DS[1]-102==0) // Off en octetos es 4F6666
{
LedAzul=1; //apaga con Lgeverde
LedVerde = 0;
LedRojo=1;
}
if(DS[0]-71==0 && DS[1]-110==0) // On en octetos es 476E
{
LedAzul=1; //apaga con Lgeverde
LedRojo =0;
LedVerde = 1;
}
}
}
}