Обновление GPS через каждые 30 секунд с помощью NeoGPS и NeoSWSerial Libray

Я использую Adafruit Ulitimate Breakout GPS module и NeoGPS и NeoSWSerial Library. Теперь я хочу, чтобы GPS обновлялся через 30 секунд один раз (1 раз в 30 секунд).После его обновления я хочу проверить местоположение, если новое местоположение равно старому местоположению, то оно должно быть обновлено через 60 секунд один раз (1 раз в 60 секунд).Если нет, то место должно быть новым местом. Он должен отображать местоположение каждые 60 секунд. Я попробовал этот поток в библиотеке Adafruit GPS, которая работает, но я хочу использовать библиотеку NeoGPS и сделать то же самое. Ниже приведен мой код библиотеки adafruit:

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10);
Adafruit_GPS GPS(&mySerial);


#define GPSECHO  true
uint32_t timer = millis();
float old_lat,old_lon,new_lat,new_lon;

void setup()
{

  Serial.begin(9600);
  delay(1000);
  Serial.println("Adafruit GPS library basic test!");
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand("$PMTK220,30000*1F");
  mySerial.println(PMTK_Q_RELEASE);
}

void loop()                     // запускайте снова и снова
{
  char c = GPS.read();
  if (GPS.newNMEAreceived()) {
    //Serial.println(GPS.lastNMEA()); // это также устанавливает флаг newNMEAreceived() в false
    if (!GPS.parse(GPS.lastNMEA()))   // это также устанавливает флаг newNMEAreceived() в false
      return;  // мы можем не разобрать предложение, и в этом случае мы должны просто ждать другого
  }

if (GPS.fix) {

      old_lat = GPS.latitudeDegrees;
      old_lon = GPS.longitudeDegrees;
      if (timer > millis())  timer = millis();
      if (millis() - timer > 60000) {  
        timer = millis();
          Serial.println("Location 1 minute:");
          displaytime();
          new_lat = GPS.latitudeDegrees;
          new_lon = GPS.longitudeDegrees;

          if (new_lat == old_lat){
            new_lat = old_lat;
          }
          else{
            new_lat = GPS.latitudeDegrees;
          }
          Serial.print("Final Latitude: ");
          Serial.println(new_lat,6);

          if (new_lon == old_lon){
            new_lon = old_lon;
          }
          else{
            new_lon = GPS.longitudeDegrees;
          }
          Serial.print("Final Longitude: ");
          Serial.println(new_lon,6);


}
}
}

void displaytime(){
    Serial.print("\nTime: ");
    if (GPS.hour < 10) { Serial.print('0'); }
    Serial.print(GPS.hour, DEC); Serial.print(':');
    if (GPS.minute < 10) { Serial.print('0'); }
    Serial.print(GPS.minute, DEC); Serial.print(':');
    if (GPS.seconds < 10) { Serial.print('0'); }
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    if (GPS.milliseconds < 10) {
      Serial.print("00");
    } else if (GPS.milliseconds > 9 && GPS.milliseconds < 100) {
      Serial.print("0");
    }
    Serial.println(GPS.milliseconds);
}

Это мой код библиотеки NeoGPS, в котором я использую NeoSWSerial:

#include <NMEAGPS.h>
#include <NeoSWSerial.h>// импорт последовательной библиотеки


NeoSWSerial gpsPort(11, 10); // RX - 11 (для GPS tx), TX -10 (для GPS rx)
NMEAGPS gps; // синтаксический
gps_fix fix; // структура со всеми проанализированными значениями


void setup() {

  gpsPort.begin(9600);
  Serial.begin(9600);
  Serial.println("GPS Start");
}

void loop() {

  if (gps.available( gpsPort)) {
      fix = gps.read();  
      Serial.println("Latitude:");
      Serial.println( fix.latitude(), 6);
      Serial.println("Longitude:");
      Serial.println( fix.longitude(), 6);

    }  
 }

, 👍1

Обсуждение

вы дали неполное описание того , как должна вести себя программа .... что произойдет, если показания местоположения не совпадут?, @jsotola

Я внес изменения, если местоположение не совпадает, то оно должно занять новое место. Но я хочу, во-первых, как обновить GPS., @Krupali Mistry

@jsotola Все в порядке с местоположением, но изначально я хочу изменить частоту обновления., @Krupali Mistry


1 ответ


1

Похоже, что использование функции расстояния в NeoGPS было бы хорошим решением этой проблемы, и это должно позволить вам создать буфер вокруг исходного местоположения, чтобы отфильтровать часть шума от показаний GPS.

Вот страница с обзором использования расстояния в NeoGPS https://github.com/SlashDevin/NeoGPS/blob/master/examples/NMEAdistance/NMEAdistance.ino

,

Пожалуйста, отредактируйте этот ответ и добавьте в него дополнительную информацию по ссылке. Если ссылка по какой-либо причине пропадает, остальная часть текста в том виде, в каком она у вас есть, не отвечает на вопрос., @sa_leinad