GPS NEO-6M. Вытащить данные из мудрёного кода.

Тема в разделе "Arduino & Shields", создана пользователем ardurino, 16 янв 2018.

Метки:
  1. ardurino

    ardurino Нерд

    Сейчас попробую убрать. Думаю это может быть и ошибкой.
     
  2. brokly

    brokly Гик

    А я уверен. И не пропустите мое сообщение внизу первой страницы.
     
  3. ardurino

    ardurino Нерд

    Мне нужно именно в этот код для GPS вставить код для GPRS в виде функции displayInfo( ), когда координаты определились.

    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial GPSModule(10, 11); // RX, TX
    int updates;
    int failedUpdates;
    int pos;
    int stringplace = 0;

    String timeUp;
    String nmea[15];
    String labels[12] {"Time: ", "Status: ", "Latitude: ", "Hemisphere: ", "Longitude: ", "Hemisphere: ", "Speed: ", "Track Angle: ", "Date: "};
    void setup() {
      Serial.begin(57600);
      GPSModule.begin(9600);
    }

    void loop() {
      Serial.flush();
      GPSModule.flush();
      while (GPSModule.available() > 0)
      {
        GPSModule.read();

      }
      if (GPSModule.find("$GPRMC,")) {
        String tempMsg = GPSModule.readStringUntil('\n');
        for (int i = 0; i < tempMsg.length(); i++) {
          if (tempMsg.substring(i, i + 1) == ",") {
            nmea[pos] = tempMsg.substring(stringplace, i);
            stringplace = i + 1;
            pos++;
          }
          if (i == tempMsg.length() - 1) {
            nmea[pos] = tempMsg.substring(stringplace, i);
          }
        }
        updates++;
        nmea[2] = ConvertLat();
        nmea[4] = ConvertLng();
        for (int i = 0; i < 9; i++) {
          Serial.print(labels[i]);
          Serial.print(nmea[i]);
          Serial.println("");
        }

      }
      else {

        failedUpdates++;

      }
      stringplace = 0;
      pos = 0;
    }

    String ConvertLat() {
      String posneg = "";
      if (nmea[3] == "S") {
        posneg = "-";
      }
      String latfirst;
      float latsecond;
      for (int i = 0; i < nmea[2].length(); i++) {
        if (nmea[2].substring(i, i + 1) == ".") {
          latfirst = nmea[2].substring(0, i - 2);
          latsecond = nmea[2].substring(i - 2).toFloat();
        }
      }
      latsecond = latsecond / 60;
      String CalcLat = "";

      char charVal[9];
      dtostrf(latsecond, 4, 6, charVal);
      for (int i = 0; i < sizeof(charVal); i++)
      {
        CalcLat += charVal[i];
      }
      latfirst += CalcLat.substring(1);
      latfirst = posneg += latfirst;
      return latfirst;
    }

    String ConvertLng() {
      String posneg = "";
      if (nmea[5] == "W") {
        posneg = "-";
      }

      String lngfirst;
      float lngsecond;
      for (int i = 0; i < nmea[4].length(); i++) {
        if (nmea[4].substring(i, i + 1) == ".") {
          lngfirst = nmea[4].substring(0, i - 2);
          //Serial.println(lngfirst);
          lngsecond = nmea[4].substring(i - 2).toFloat();
          //Serial.println(lngsecond);

        }
      }
      lngsecond = lngsecond / 60;
      String CalcLng = "";
      char charVal[9];
      dtostrf(lngsecond, 4, 6, charVal);
      for (int i = 0; i < sizeof(charVal); i++)
      {
        CalcLng += charVal[i];
      }
      lngfirst += CalcLng.substring(1);
      lngfirst = posneg += lngfirst;
      return lngfirst;
    }
     
  4. brokly

    brokly Гик

    Что вы какие то куски публикуете ? Нужно вставить - вставляйте. Где она эта процедура в этом коде ? Ее нет.
    Что вы собираетесь делать со счетчиками updates и failedUpdates ? Они вам в данный момент нахрена ? Зачем тут ConvertLng() и ConvertLat(), что бы все запутались, плюнули и соскочили с темы ?
     
  5. ardurino

    ardurino Нерд

    Хорошо, посижу поразбираюсь получше. Что не пойму опять спрошу.