GPS-приемник + Ublox NEO-6M - возникли проблемы с тайм-аутом - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь написать некоторый код, который включит модуль gps и будет ждать поступления данных, чтобы я мог потом что-то с ним сделать. Мне не нужен непрерывный поток; Мне нужен только первый лат / лонг, полученный от устройства GPS, затем я могу отключить его. Мне также нужно это просто остановить, если он не может найти свое местоположение в течение определенного времени (например, 20 секунд)

Вот простой код, который я пытался заставить gps прочитать (полный код с тайм-аутом будет позже)

    #include <TinyGPS++.h>

    #include <SoftwareSerial.h>
    TinyGPSPlus gps;  // The TinyGPS++ object
    SoftwareSerial ss(D4, D3); // The serial connection to the GPS     
    float latitude , longitude;
    int count = 0;


    void setup()
    {

      Serial.begin(9600);
      ss.begin(9600);
      Serial.println();
      Serial.print("Starting");

    }

    void loop()
    {
      while (ss.available() > 0)
        if (gps.encode(ss.read()))
        {
          if (gps.location.isValid())
          {
            latitude = gps.location.lat();
            lat_str = String(latitude , 6);
            longitude = gps.location.lng();
            lng_str = String(longitude , 6);
          }

        }
      Serial.println(lat_str + ":" + lng_str);
      delay(100);
      count += 1;
      String Count = String(count);
      Serial.println(Count);
    }

Если указанная выше задержка равна 100, то все работает нормально, когда задержка равна 1000, и вдруг данные не поступают.

Вот полный код, который я пробовал, который включает мое время ожидания и состояние прорыва, опять же не работает. Здесь линия обрезания находится в функции GPS_mode: while ((stoploop <1) && (previous - startTime <TimeOut)). </p>

    #include <SoftwareSerial.h>
    #include <TinyGPS++.h>
    TinyGPSPlus gps;  // The TinyGPS++ object
    SoftwareSerial ss(D4, D3); // The serial connection to the GPS d

    int stoploop = 0; //used for stopping gps once a signal lock or     timeout is reached
    unsigned long startTime = millis(); // timer used for gps timeout
    const int gpsCutoffPin = D1;

    void setup() {
      //initialise the serial monitor
      Serial.begin(9600);
      gps_ss.begin(9600);
      //initialise the transistor pins
      pinMode(gpsCutoffPin, OUTPUT);
      // Start the gps in an off state
      digitalWrite(gpsCutoffPin, LOW);
    }

    void loop() {
        Serial.println("Enter GPS mode");
        GPS_mode();
        Serial.println("Back to the main loop now...");
        Serial.println(stoploop);
        delay(100000);
    }

    void GPS_mode(){
      //turn on the gps
      digitalWrite(gpsCutoffPin, HIGH);
      stoploop = 0;
      startTime = millis();
      previous = millis();
      int TimeOut = 60*1000;
      gps_ss.listen();
      Serial.println(stoploop);
        while ((stoploop < 1) && (previous - startTime < TimeOut))
      {
        while (gps_ss.available() > 0)
        {
          if (gps.encode(gps_ss.read()))
          {
            logInfo();
          }
          yield();
        }

      }
      gpsLat = (gps.location.lat(), DEC);
      gpsLon = (gps.location.lng(), DEC);


      // turn off the gps
      digitalWrite(gpsCutoffPin, LOW);
    }

    void logInfo(){
      // Causes us to wait until we have satelite fix
      if(!gps.location.isValid())
      {
        Serial.println("Not a valid location. Waiting for satelite data.");

        //return;
      }
    else {
       //url += String(gps.location.lat(), DEC);

        //url += String(gps.location.lng(), DEC);
        Serial.println(gps.location.lat(), DEC);
        Serial.println(gps.location.lng(), DEC);
        stoploop = 2;
        //delay(1000);
    }
    previous = millis();
    }

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

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

Спасибо

...