Hola, que tal?.
estoy trabajando en un localizador mediante un sim800l y un neo6m, la electronica funciona bien, ya que cada uno por su cuenta funciona.
el usuario envia un sms con la clave para localizar "Ubicar", si no detecta la clave envia un sms de error "clave y/o comando incorrectos". De ser correcta la clave y el comando se genera un link a google maps mediante strings y floats, luego se inicia el sim800l para enviar dicho link. segun el monitor seriel sms sale porque el sim devuelve "OK", pero al telefono que pidio la ubicacion, no le llega nada.
probe por separado la funcionalidad de registrar el numero de telefono y contestar, funcionó con todos los dispositivos que probé. pero cuando pongo el programa para enviar el link, este mismo me dice que el sms salio, pero al telefono no llega nada.
ya he llamado a la empresa de telefonia movil para consultar la salida de los sms y me dijeron que es correcta.
necesito ayuda urgente
#include <SoftwareSerial.h>
#include <TinyGPS.h>
String Numero = "";
String Comando;
String Http = "https://www.google.com/maps/place/";
String Clave = "Ubicar";
float flat, flon;
unsigned long age;
TinyGPS gps;
SoftwareSerial SIM(3, 4); //Pin TX del modulo al 3 del arduino, pin RX del modulo al 4 del arduino
SoftwareSerial GPS(7, 8); //Pin TX del modulo al 7 del arduino, pin RX del modulo al 8 del arduino
void setup() {
Serial.begin(9600); //Iniciamos la comunicacion serie
GPS.begin(9600);
SIM.begin(9600); //Iniciamos una instancia de la librería SoftwareSerial
SIM.listen(); //Selecciona la comunicacion con el modulo sim800l
delay(100);
SIM.println("AT");
updateSerial();
SIM.println("AT+CSCS=\"GSM\"");
updateSerial();
SIM.println("AT+CSQ");
updateSerial();
SIM.println("AT+CCID");
updateSerial();
SIM.println("AT+CREG?");
updateSerial();
SIM.println("AT+CMGF=1");
updateSerial();
SIM.println("AT+CNMI=1,2,0,0,0");
updateSerial();
}
void loop() {
if (SIM.available()) { //Si hay datos disponibles
Comando = SIM.readString(); //Los almacenamos en la variable Comando
Serial.println(Comando);
Numero = Comando.substring(9,20);
Serial.println(Numero); //extrae el numero de telefono del emisor del sms
if (Comando.indexOf(Clave) >= 0){ //Si la variable Comando contiene la palabra clave
Serial.println("***Ubicando***");
Ubicar(); //llama a la funcion
Comando = ""; //Vaciamos la variable
}else if(Numero.indexOf("011") >= 0){
SMS("Clave y/o Comando incorrecta");
}
delay(100);
}
//Serial.println("esperando comando");
delay(250);
//updateSerial();
}
void updateSerial()
{
delay(500);
while (Serial.available())
{
SIM.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while (SIM.available())
{
Serial.write(SIM.read());//Forward what Software Serial received to Serial Port
}
}
void Ubicar() {
GPS.listen();
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;
for (unsigned long start = millis(); millis() - start < 1000;){
while (GPS.available()){
char c = GPS.read();
if (gps.encode(c)) // Did a new valid sentence come in?
newData = true;
}
}
if (newData){
gps.f_get_position(&flat, &flon, &age);//almacena los datos en flat(latitud) flon(longitud);
Serial.println(flat);
Serial.println(flon);
SIM.listen();
delay(100);
SMS("ok");
}
}
void SMS(String Cadena){
SIM.listen();
delay(100);
SIM.println("AT+CMGF=1");
updateSerial();
delay(100);
SIM.print("AT+CMGS=");
SIM.print('"');
SIM.print(Numero);
SIM.println('"');
updateSerial();
if(Comando.indexOf(Clave) >= 0){
SIM.print(Http); //text content
SIM.print(flat,6); //text content
SIM.print(","); //text content
SIM.print(flon,6); //text content
}else{
SIM.print(Cadena); //text content
}
updateSerial();
SIM.write(26);
updateSerial();
delay(100);
Numero = ""; //se borra el numero
delay(100);
}