ola,
Este código que retirei da internet, consiste em fazer a leitura do modulo GPS (NEO 6M) e enviar via mensagem de texto pelo modulo GSM (SIM 800l), ambos conectado a um arduino NANO, mas não esta aparecendo as coordenadas e quando pede para enviar só aparece longitude e latitude 0,0000 no telefone destinatário. Eu testei os dois módulos em separados e estão funcionando, bom é isso. Obrigado e qualquer retorno sera bem-vindo.
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial my(2, 3);
SoftwareSerial serialgps(4, 5);
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
float latitude, longitude;
int contLocalizacao = 0;
//V3 resumido
int ignicao = A1;
//int travas = A0;
const int BotaoSOS_1 = A2;
char info[400];
char ligarluz[] = "#1";
//char desligarluz[] = "#2";
char numero[13] = "";// inserir numero de telefone
String adminPDU = numero;
void setup()
{
pinMode(ignicao, OUTPUT); digitalWrite(ignicao, HIGH);
//pinMode(travas, OUTPUT); digitalWrite(travas, HIGH);
pinMode(BotaoSOS_1, INPUT);
Serial.begin(9600);
my.begin(4800);
clear_SMS_Memory();
Serial.println("SMS apagados");
Serial.println("Inicio do Loop");
my.println("AT+CMGF=1");
Serial.println(adminPDU);
delay(5000);
enviaSMSlocalizacao("Inico do sistema\n");
}
void loop() //
{
msgSOS();
my.println("AT+CMGR=1");
int index = 0;
unsigned long startTime = millis();
while (millis() < (startTime + 1000))
{
if (my.available() > 0) {
info[index] = my.read();
Serial.println("info[index]");
Serial.print(info[index]);
index++;
}
}
if (String(info).indexOf("+CMGR:") > 0 && String(info).indexOf(",,0") < 0)
{
delay(5000);
my.println("AT+CMGR=1");
index = 0;
startTime = millis();
while (millis() < (startTime + 1000))
{
if (my.available() > 0) {
info[index] = my.read();
index++;
}
}
Serial.println("//Mensagem Recebida:");
Serial.println(String(info));
Serial.println("//Fim da Mensagem\\");
Serial.println("Mensagem do admin");
if (String(info).indexOf(String(ligarluz)) > 0)
{ LigarLuz();
Serial.println("DEBUG --- dentro do if 1");
}
my.println("AT+CMGD=1");
delay(1000);
while (my.available() > 0) my.read();
Serial.println("Mensagem Apagada");
memset( &info, 0, sizeof(info) );
}
}
void LigarLuz()
{
digitalWrite(ignicao, LOW);
Serial.println("Entendido a mensagem");
sequenciaGPS();
delay(3000);
my.begin(4800);
delay(5000);
enviaSMSlocalizacao("SXT achada\n");
delay(2000);
Serial.println("\n\nSMS Enviado");
clear_SMS_Memory();
delay(5000);
}
void clear_SMS_Memory() {
unsigned short i = 0;
for (i = 0; i <= 30; i++) {
my.print("AT+CMGD=");
my.println(i);
delay(100);
}
while (my.available() > 0) my.read();
}
void enviaSMSlocalizacao(String sms)
{
Serial.println("Iniciando comunicacao...");
my.print("AT+CMGF=1\r");
delay(500);
my.println("AT+CMGS=\"" + adminPDU + "\"\r"); // comando para envio
delay(500);
my.print("" + sms + ""); // texto para a mensagem
my.print("Localizacao:"); // texto para a mensagem
Serial.print("Localizacao:"); // texto para a mensagem
my.print("\nwww.google.com.br/maps/place/");
Serial.print("www.google.com.br/maps/place/");
my.print(latitude, 5); // texto para a mensagem
Serial.print(latitude, 5);
my.print(","); // texto para a mensagem
Serial.print(",");
my.print(longitude, 5); // texto para a mensagem
Serial.print(longitude, 5);
my.println("\r"); // texto para a mensagem
delay(500);
my.println((char)26);//o código ASCII do ctrl + z é 26
}
void sequenciaGPS()
{
Serial.println("\nAguardando dados do GPS...");
serialgps.begin(9600);
delay(20000);
while (serialgps.available())
{
int c = serialgps.read();
if (gps.encode(c))
{
gps.f_get_position(&latitude, &longitude);
Serial.print("Lat/Long: ");
Serial.print(latitude, 5);
Serial.print(", ");
Serial.println(longitude, 5);
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
Serial.print("Date: "); Serial.print(month, DEC); Serial.print("/");
Serial.print(day, DEC); Serial.print("/"); Serial.print(year);
Serial.print(" Time: "); Serial.print(hour, DEC); Serial.print(":");
Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC);
Serial.print("."); Serial.println(hundredths, DEC);
Serial.print("Altitude (meters): "); Serial.println(gps.f_altitude());
Serial.print("Course (degrees): "); Serial.println(gps.f_course());
Serial.print("Speed(kmph): "); Serial.println(gps.f_speed_kmph());
Serial.print("Satellites: "); Serial.println(gps.satellites());
Serial.println();
gps.stats(&chars, &sentences, &failed_checksum);
}
}
}
void msgSOS()
{
int btSOS1 = digitalRead(BotaoSOS_1);
if (btSOS1 == 1)
{
sequenciaGPS();
Serial.println("\nAdquirindo dados...");
my.begin(9600);
delay(5000);
enviaSMSlocalizacao("OBJETO FURTADO\n");
delay(5000);
Serial.println("\nSMS enviado");
}
}