Problema Gps con Arduino uno y Sim900 gsm

Hola tengo un proyecto el cual consiste en que por medio de un sms pueda prender y apagar un auto y además pueda rastrearse el mismo desde cualquier lugar, para ello estoy utilizando una arduino uno y el shield sim900 gsm, problema es que me saltan errores en el programa pero cuando los corrijo me salta en otro lugar y así sucesivamente. Ya me di por vencido con los errores y si alguien me puede ayudar les agradecería
Adjunto el programa para que me puedan corregir en lo que me equivoco…

(56.9 KB)

Intenta leer las normas del foro y publicar con etiquetas el código (no en formato pdf)
El código debe verse si tiene menos de 9k y de lo contrario lo adjuntas.

/*
*comandos usados
*envie @LEDON y activa un led por el pin 11
*envie @LEDOF y apaga el led
*envie @GPS y activa gps de forma temporal hasta que tome señal
*/
#include <SoftwareSerial.h>
#include <TinyGPS.h>
SoftwareSerial gsm(7, 8); // RX, TX
TinyGPS gps;
char numero_cell= “095761xxx” ; // COLOCAMOS NUMERO DE TELEFONO
int estado=13;
int led=11;
int i=0;
int j=0;
int led_on=0;

float lati,longi=0;
char DAT;
char DAT_dos;
char DAT_GPS;
float flat, flon;
unsigned long age;
char coordenada_gps;
char datosSERIAL[30];
//char clave_uno= “LEDON”; //OTRA FORMA DE USAR UN ARREGLO
char clave_uno={‘L’,‘E’,‘D’,‘O’,‘N’}; //AQUI CAMBIAMOS TODO EL
MENSAJE DE CONTROL
char clave_dos={‘L’,‘E’,‘D’,‘O’,‘F’,‘F’}; //AQUI CAMBIAMOS TODO EL
MENSAJE DE CONTROL
char clave_gps={‘G’, ‘P’, ‘S’};
void setup()
{
pinMode(led,OUTPUT);
pinMode(estado,OUTPUT);
Serial.begin(9600);
gsm.begin(9600);

delay(2000);
configuracion_inicial();
Serial.println(“sistema de alarma SIM900 encendida”);

delay(1000);
}
///////////////////////////////////
void loop()
{
Serial.println(“esperando recibir mensaje…”);
while(true)
{
leer_mensaje();
}
}
/////////////////////////////////////////
void configuracion_inicial()//configura los codigos de lectura de mensajes
{
gsm.println(“AT+IPR=9600”);
Serial.println(“AT+IPR=9600”);
delay(500);
gsm.println(“AT+CMGF=1”);//MODO TEXTO
Serial.println(“AT+CMGF=1”);//MODO TEXTO
delay(500);
gsm.println(“AT+CMGR=?”);//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
Serial.println(“AT+CMGR=?”);//ACTIVAMOS CODIGO PARA RECIBIR MENSAJES
delay(500);
gsm.println(“AT+CNMI=2,2,0,0”);// ACTIVAMOS PARA VER MENSAJES
Serial.println(“AT+CNMI=2,2,0,0”);// ACTIVAMOS PARA VER MENSAJES

delay(500);
Serial.println(“configuracion terminada”);
delay(300);
////////////////////////////////////////////////ACTIVAR GPS DESDE EL INICIO
gsm.println(“AT+CGNSPWR=1”);// ACTIVO GPS
Serial.println(“AT+CGNSPWR=1”);// ACTIVO GPS
// gsm.println(“AT+CGNSPWR=1”);// ACTIVO GPS
//Serial.println(“AT+CGNSTST=1”);
delay(400);
}
////////////////////////////////////////////////////////////////////////
void leer_mensaje()
{
salir:;
if (gsm.available()>0)
{
char DAT =gsm.read();
if(DAT=’@’);// EL ARROBA HACE DETECTAR EL INICIO DEL CODIGO
{//if arroba
digitalWrite(estado,HIGH);// LED DE TESTEO DE MENSAJE
Serial.println(“llego dato”);//PARA VERIFICAR SI LO DETECTO
////////////////////////////////////////////////////////////////////////////////
while(true);// INGRESA EN UN WHILE PARA LEER SOLO LOS CODIGOS
FUTUROS QUE ESTAN POR LLEGAR DESPUES DE LA ARROBA
{
if (gsm.available()>0);
{// cierre del segundo if
char DAT_dos =gsm.read();//@LEDON enter
datosSERIAL[j]= DAT_dos;//ALMACENA EN CADENA DE
CARACTERES, SUMA DE CARACTERES
j++;
////////////////////////////////////////////////////////////////////////////////////////////
if(DAT_dos==’\n’);//CUANDO TERMINE DE ENTREGAR TODAS
LOS DATOS DARA UN ENTER
//GARANTIZANDO EL FINAL DE CODIGO
{
Serial.println(“lectura correcta del codigo
enviado:”);//IMPRIME LOS CARACTERES ALMACENADOS
for(int i=0;i<=j;i++)
{

Serial.print(datosSERIAL*);//IMPRIME CODIGO GUARDADO*
EN EL ARRAY

  • }*
  • led_on();//LLAMA A LA FUNCION Y VERIFICA CODIGO*
  • led_off();//LLAMA A LA FUNCION PARA VER SI ES DE APAGAR EL LED*
  • gps_on();//VERIFICA SI ES CODIGO DE ACTIVACION DE GPS*
  • digitalWrite(estado,LOW);//APAGA EL LED DESPUES DE VERIFICAR*
  • for(int i=0;i<=j;i++);*
  • {*
    _ datosSERIAL*==0;//borro array*_
    * DAT_dos=0;
    _
    DAT=0;_
    _
    }_
    _
    j=0;//BORRA EL PUNTERO O ACUMULADOR SI NO SE HACE*_
    ESTO NO DETECTA LOS SIGUIENTES CODIGOS
    * goto salir;//SALE DE TODOS LOS CICLOS Y VA AL INICIO*
    PARA VOLVER A LEER CODIGO
    * }//CIERRA AL /N*
    ////////////////////////////////////////////////////////////////////////////

}//CIERRE DEL SEGUNDO IF
}//while
}//ARROBA
}//serial available
}
void led_off()
{
/////////////////////////////////////////////////////////////////////////////////////
if(datosSERIAL[0]==clave_dos[0] && datosSERIAL[1]==clave_dos[1] &&
datosSERIAL[2]==clave_dos[2] && datosSERIAL[3]==clave_dos[3] &&
datosSERIAL[4]==clave_dos[4]&& datosSERIAL[5]==clave_dos[5]);
{
digitalWrite(led,LOW);
Serial.println(" LED DESACTIVADO…");
mensaje_apagado();
}
}else Serial.println(“codigo incorrecto led off”);
}
////////////////////////////////////////////////////////////////////////
void led_on()
{
//////////////////////////////////////////////////////////////////////////////////
if(datosSERIAL[0]==clave_uno[0] && datosSERIAL[1]==clave_uno[1] &&
datosSERIAL[2]==clave_uno[2] && datosSERIAL[3]==clave_dos[3] &&
datosSERIAL[4]==clave_dos[4]);
{
digitalWrite(led,HIGH);
Serial.println(“LED ACTIVADO…”);
mensaje_encendido();
}
if else Serial.println(" codigo incorrecto led on")
}
//////////////////////////////////////////////////////////////////////////////////

void gps_on()
{
/////////////////////////////////////////////////////////////////////////////////
if(datosSERIAL[0]==clave_gps[0] && datosSERIAL[1]==clave_gps[1] &&
datosSERIAL[2]==clave_gps[2] )
{
Serial.println(“codigo correcto gps”) ;
activacion_gps();
mensaje_gps_coordenada();//ENVIA LAS VARIABLES DE LATITUD Y
LONGITUD POR GSM AL CELULAR PROGRAMADO
Serial.println(“lectura gps enviada…”);
Serial.print("LATtt= ");
Serial.println(lati);
Serial.print(“LONnn= “);
Serial.println(longi);
}
else Serial.println(” codigo incorrecto gps”) ;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mensaje_apagado()
{
gsm.println(“AT+CMGF=1”);//MODO TEXTO
// IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII
SEGUIDO DE UN RETORNO DE CARRO
delay(1000);
gsm.print(“AT+CMGS=”); //COMANDO DE ENVIO DE MENSAJE A UN
NUMERO DETERMINADO
delay(1000);
//IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII
gsm.print((char)34);//PONEMOS LAS COMILLAS ", PARA QUE LO
TOME DEBE SER CHAR
gsm.print(numero_cell);//COLOCAMOS NUMERO DE TELEFONO
gsm.println((char)34);//VOLVEMOS A PONER EL CARACTER "
delay(1000);//TIEMPO PARA QUE DE RESPUESTA EL MODULO >
gsm.print(“led apagado”);//MENSAJE QUE ENVIARE
gsm.print((char)26);//PONEMOS EL SIMBOLO ASCII 26, QUE
CORRESPONDE A CTRL+Z

Serial.print(“led apagado”);//MENSAJE QUE ENVIARE
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void mensaje_encendido()
{
gsm.println(“AT+CMGF=1”);//MODO TEXTO
//IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII SEGUIDO
DE UN RETORNO DE CARRO
delay(1000);
gsm.print(“AT+CMGS=”);//COMANDO DE ENVIO DE MENSAJE A UN
NUMERO DETERMINADO
delay(1000);
//IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII
gsm.print((char)34);//PONEMOS LAS COMILLAS ", PARA QUE LO TOME
DEBE SER char
gsm.print(numero_cell);//COLOCAMOS EL NUMERO DE TELEFONO
gsm.println((char)34);////VOLVEMOS A PONER EL CARACTER "
delay(1000);//TIEMPO PARA QUE DE RESPUESTA EL MODULO >
gsm.print(“led encendido”);//MENSAJE QUE ENVIARE
gsm.print((char)26);// PONEMOS EL SIMBOLO ASCII 26,QUE
CORRESPONDE A CTRL+Z

Serial.print(“led encendido”);//mensaje que enviare
}
////////////////////////////////////////////////////////////////////////
void mensaje_gps_coordenada()
{
gsm.println(“AT+CMGF=1”);// MODO TEXTO
//IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII SEGUIDO DE
UN RETORNO DE CARRO
delay(1000);
gsm.print(“AT+CMGS=”);//COMANDO DE ENVIO DE MENSAJE A UN
NUMERO DETERMINADO
delay(1000);
//IMPRIME LOS DATOS AL PUERTO SERIE COMO TEXTO ASCII
gsm.print((char)34);//PONEMOS LAS COMILLAS ", PARA QUE LO TOME
DEBE SER char
gsm.print(numero_cell);//COLOCAMOS EL NUMERO DE TELEFONO
gsm.println((char)34);////VOLVEMOS A PONER EL CARACTER "
delay(1000);//TIEMPO PARA QUE DE RESPUESTA EL MODULO >
gsm.print("LAT= ");
gsm.print(lati);
gsm.print("LON= ");
gsm.print(longi);
gsm.print((char)26);//PONEMOS EL SIMBOLO ASCII 26, QUE
CORRESPONDE A CTRL+Z
delay(200);
lati,longi=0;//BORRO LOS DATOS DE LA VARIABLE
}
/////////////////////////////////////////////////////////////////////////
void activacion_gps()
{
gsm.println(“AT+CGNSPWR=1”);//ACTIVO GPS
Serial.println(“AT+CGNSPWR=1”);//ACTIVO GPS
delay(400);
Serial.println(“por favor espere 10 segundos estabilizando
GPS…”);//MENSAJE PARA INDICAR QUE SE ESTA ACTIVANDO EL GPS
delay(10000);//ESPERO X SEGUNDOS PARA ESPERAR QUE EL GPS SE
ESTABILICE Y TOME DATOS DEL SATELITE
Serial.println(“esperando lectura y conversion”);

tinyGPS_leer();//LEER COORDENADAS POR MEDIO DE LAS LIBRERIAS Y
LAS CONVIERTE A LATITUD LONGITUD
/*
while[1];//TOMA 3 VECES LOS DATOS DEL PUERTO SERIAL
{
solo_lectura_gps();//NUNCA SALE DE ESTE CICLO
}
*/
//gsm.println(“AT+CGNSPWR=0”);//APAGO GPS
//Serial.println(“gps apagado”);
delay(400);
}
///////////////////////////////////////////////////////////////////////////
///leer coordenadas de libreria tiny
void Tiny_GPS_leer()
{
i=0;
while(i<5);
{
i++;

bool newData = false;
unsigned long chars;
unsigned short sentences, failed;

//For one second we parse GPS data and report some key values
for (unsigned long start = millis(); millis() - start < 1000;);
{
while (gsm.available());
{
char c = gsm.read();
//Serial.write(c); // uncomment this line if you want to see
the GPS data flowing
if (gps.encode(c)) // ¿Entró una nueva sentencia válida?
newData = true;
}
}
if (newData);
{
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print(“LAT=”);
Serial.println(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
lati = flat;
Serial.print(“LON=”);
Serial.println(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0: flon, 6);
longi = flon;
}
}
i=0;
}
void solo_lectura_gps() // run over and over
{
if(gsm.available());
Serial.print((char)gsm.read());
}

Por favor, relee el post#1 donde te pido que leas las normas del foro y luego me envias un privado y en ese privado me pegas un fragmento de código debidamente con etiquetas.
Te pedi que postearas de acuerdo a las normas y pegas como texto plano!!
Parece una burla