Как я могу получить местоположение GPS, которое будет обновляться каждый раз перед отправкой текстового сообщения?

Этот код Arundio Uno соответствует и работает отлично. Как только я включаю модуль Sim808 и устанавливаю свою сим-карту, он получает сигнал сети через GSM, получает местоположение GPS от антенны и отправляет текст на нужный номер с координатами через ссылку Google Maps. ОДНАКО, он не обновляет координаты местоположения GPS, но продолжает просто текст и повторять исходные координаты, когда я перемещаюсь или меняю местоположение, пока я не нажму reset на ardunio. Как я могу это исправить в коде? Должен ли я применить цикл while к определенной функции или добавить функцию в конце кода, чтобы просто сбросить мой ardunio и пройти код с самого начала, чтобы получить обновленные координаты местоположения? СПАСИБО ЗАРАНЕЕ ЗА ЛЮБУЮ ПОМОЩЬ

#include <SoftwareSerial.h>
SoftwareSerial sim808(7,8);

char phone_no[] = "xxxxxxxxxx"; // replace with your phone no.
String data[5];
#define DEBUG true
String state,timegps,latitude,longitude;

void setup() {
 sim808.begin(9600);
 Serial.begin(9600);
 delay(50);

 sim808.print("AT+CSMP=17,167,0,0\r");  // set this parameter if empty SMS received
 delay(100);
 sim808.print("AT+CMGF=1\r"); 
 delay(400);

 sendData("AT+CGNSPWR=1",1000,DEBUG);
 delay(50);
 sendData("AT+CGNSSEQ=RMC",1000,DEBUG);
 delay(150);

}

void loop() {
  sendTabData("AT+CGNSINF",1000,DEBUG);
  if (state !=0) {
    Serial.println("State  :"+state);
    Serial.println("Time  :"+timegps);
    Serial.println("Latitude  :"+latitude);
    Serial.println("Longitude  :"+longitude);

    sim808.print("AT+CMGS=\"");
    sim808.print(phone_no);
    sim808.println("\"");

    delay(300);
    sim808.print("LOCATION SUCCESSFULLY FOUND!\nPlease use Google Maps link provided below.\n");
    sim808.print("http://www.google.com/maps/place/");
    sim808.print(latitude);
    sim808.print(",");
    sim808.print (longitude);
    delay(200);
    sim808.println((char)26); // End AT command with a ^Z, ASCII code 26
    delay(200);
    sim808.println();
    delay(20000);
    sim808.flush();

  } else {
    Serial.println("GPS Initialising...");
  }
}

void sendTabData(String command , const int timeout , boolean debug){

  sim808.println(command);
  long int time = millis();
  int i = 0;

  while((time+timeout) > millis()){
    while(sim808.available()){
      char c = sim808.read();
      if (c != ',') {
         data[i] +=c;
         delay(100);
      } else {
        i++;  
      }
      if (i == 5) {
        delay(100);
        goto exitL;
      }
    }
  }exitL:
  if (debug) {
    state = data[1];
    timegps = data[2];
    latitude = data[3];
    longitude =data[4];  
  }
}
String sendData (String command , const int timeout ,boolean debug){
  String response = "";
  sim808.println(command);
  long int time = millis();
  int i = 0;

  while ( (time+timeout ) > millis()){
    while (sim808.available()){
      char c = sim808.read();
      response +=c;
    }
  }
  if (debug) {
     Serial.print(response);
     }
     return response;
}

0 ответов

Другие вопросы по тегам