Estimada comunidad, estoy realizando un proyecto en la cual consiste enviar un SMS con coordenadas gps a través de un pulsador para luego ser visto a través de google maps.
El módulo GPS que uso gy-neo6mv2 mas conocido como Ublox Neo 6M GPS y una SHIELD SIM900 en Arduino UNO, el problema cae en lo siguiente, mi proyecto envía el SMS pero sin las coordenadas GPS y contenido del texto, a que me refiero; "Google Maps" concadenado con las coordenadas obtenidas del módulo
Estoy utilizando IDE 1.6.5 ya que versiones actuales me ha dado más problemas, cabe mencionar que no soy del todo experto en el mundo arduino. Apreciaría toda la ayuda posible.
A continuación adjunto el código
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <sms.h>
#include <SIM900.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 38400;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
SMSGSM sms;
SoftwareSerial SIM900(7, 8);
const int buttonPin = 6;
const int ledPin = 13;
int i=0;
bool estadoubicacion = HIGH;
char mensaje[120];
char latitud[12];
char longitud[12];
bool estado = LOW;
bool estado_anterior = LOW;
void setup()
{
Serial.begin(9600);
ss.begin(GPSBaud);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
// Apagamos el LED al empezar
digitalWrite(ledPin , LOW) ;
//inicia placa arduino
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
Serial.println(F("Sistema iniciado"));
}
void loop()
{
estado = digitalRead(buttonPin);
if ( estado != estado_anterior ) {
if (estado == HIGH) {
Luces();
Localizacion();
estadoubicacion=!estadoubicacion;
i=0;
}
}
digitalWrite(ledPin , LOW) ;
estado = LOW;
estado_anterior = LOW;
ss.begin(GPSBaud);
}
void Localizacion(){
while( estadoubicacion == HIGH ) {
if (ss.available() > 0) {
if (gps.encode(ss.read())) {
if (gps.location.isValid()) {
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
Serial.println("");
strcpy(mensaje, "Necesito ayuda estoy cerca de ");
strcat(mensaje, "http://maps.google.com/maps?z=12&t=m&q=loc:");
//tomando la lectura del modulo GPS se extrae de esta
// cadena solo la informacion referente a la latitud
dtostrf(gps.location.lat(), 1, 6, latitud);
strcat(mensaje, latitud);
strcat(mensaje, "+");
//tomando la lectura del modulo GPS se extrae de esta
// cadena solo la informacion referente a longitud
dtostrf(gps.location.lng(), 1, 6, longitud);
strcat(mensaje, longitud);
strcat(mensaje,"");
EnviarSMS();
estadoubicacion=!estadoubicacion;
}
}
}
if (millis() > 5000 && gps.charsProcessed() < 10){
i++;
Serial.println(i);
delay(5000);
if(i==2 && estadoubicacion == HIGH){
strcpy(mensaje, "Necesito ayuda");
strcat(mensaje,"");
Serial.println(F("\nMensaje creado"));
delay(1000);
EnviarSMS();
estadoubicacion=!estadoubicacion;
}
}
}
}
void EnviarSMS() {
//este metodo se encarga del envio del mensaje SMS a un destinatario
//definido en este punto
Serial.println(F("Encendiendo Shield GSM"));
//inicio shield GSM SIM900
if (gsm.begin(9600)) {
gsm.forceON();
if (sms.SendSMS("123456789", mensaje)) {
Serial.println(F("\nSMS enviado"));
Luces();
}
}
}
void Luces(){
// este metodo controla el funcionamiento de un LED el cual es usado
// para elertar que la alarma funciono de la manera esperada
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}