Go Down

Topic: SIM800L y NEO6M-V2 | No envia mensajes (Read 123 times) previous topic - next topic

1DExAHI

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

Code: [Select]

#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);
}


Go Up