lc29hAA gps data on esp32

TinyGPSPlus gps;

//HardwareSerial GPS(1); // Use UART1 for LC29H

SoftwareSerial mySerial(16, 17); // RX, TX pins (adjust as needed)

const int WAKEUP_PIN = 2; // Replace with the actual pin number
void setBaseStation() {
const int numSamples = 50; // Number of readings to average
double totalLat = 0, totalLng = 0, totalAlt = 0;
int validSamples = 0;

bool hasPreviousData = false;

// File name for storing RTK base station coordinates
const char* filePath = "/rtk_base_coords.txt";

// Initialize LittleFS
if (!LittleFS.begin()) {
    Serial.println("Failed to mount LittleFS!");
    return;
}

// Check if the file with previous RTK coordinates exists
if (LittleFS.exists(filePath)) {
    File file = LittleFS.open(filePath, "r");
    if (file) {
        // Read previously saved coordinates
        String latStr = file.readStringUntil(',');
        String lngStr = file.readStringUntil(',');
        String altStr = file.readStringUntil('\n');

        rtkLat = latStr.toDouble();
        rtkLng = lngStr.toDouble();
        rtkAlt = altStr.toDouble();

        hasPreviousData = true;
        Serial.println("Loaded previous RTK base station coordinates:");
        Serial.print("Latitude: ");
        Serial.println(rtkLat, 8);
        Serial.print("Longitude: ");
        Serial.println(rtkLng, 8);
        Serial.print("Altitude: ");
        Serial.println(rtkAlt, 2);

        file.close();
    } else {
        Serial.println("Failed to open RTK coordinates file for reading.");
    }
} else {
    Serial.println("No previous RTK base station coordinates found.");
}

Serial.println("Averaging GPS readings for base station...");

while (mySerial.available() > 0) {
Serial.println(“gps is encoding…”);
gps.encode(mySerial.read());
}

// Collect GPS samples to calculate the average
for (int i = 0; i < numSamples; i++) {
    if (gps.location.isValid()) {
        totalLat += gps.location.lat();
        totalLng += gps.location.lng();
        totalAlt += gps.altitude.meters();
        validSamples++;

        // Check RTK status in GGA
        // if (gps.gga.fix_quality == 4) {
        //     Serial.println("RTK Fixed position.");
        // } else if (gps.gga.fix_quality == 5) {
        //     Serial.println("RTK Float position.");
        // } else {
        //     Serial.println("No RTK Fix. GNSS Quality: " + String(gps.gga.fix_quality));
        // }
    } //else {
       // Serial.println("Invalid GPS reading, skipping...");
            // Print additional information for debugging invalid readings
  // Serial.print("Invalid GPS reading (");
  // Serial.print(i + 1);
  // Serial.print("/<bos>");
  // Serial.print(numSamples);
  // Serial.println("):");

  // Check for specific error codes from TinyGPSPlus (if available)
  // if (gps.gpsError) {
  //   Serial.print("  Error code: ");
  //   Serial.println(gps.gpsError);
  // }
 //   }

//   delay(1000); // Wait 1 second between samples
}

if (validSamples > 0) {
    // Calculate average position
    double avgLat = totalLat / validSamples;
    double avgLng = totalLng / validSamples;
    double avgAlt = totalAlt / validSamples;

    if (hasPreviousData) {
        // Average with previously saved data
        rtkLat = (avgLat + rtkLat) / 2;
        rtkLng = (avgLng + rtkLng) / 2;
        rtkAlt = (avgAlt + rtkAlt) / 2;
    } else {
        // Use the newly calculated averages directly
        rtkLat = avgLat;
        rtkLng = avgLng;
        rtkAlt = avgAlt;
    }

    Serial.println("Averaged Base Station Position:");
    Serial.print("Latitude: ");
    Serial.println(rtkLat, 8);
    Serial.print("Longitude: ");
    Serial.println(rtkLng, 8);
    Serial.print("Altitude: ");
    Serial.println(rtkAlt, 2);

    // Save the new RTK base station coordinates to LittleFS
    File file = LittleFS.open(filePath, "w");
    if (file) {
        file.print(String(rtkLat, 8) + ",");
        file.print(String(rtkLng, 8) + ",");
        file.println(String(rtkAlt, 2));
        file.close();
        Serial.println("RTK base station coordinates saved to LittleFS.");
    } else {
        Serial.println("Failed to open RTK coordinates file for writing.");
    }

    // Set the base station with the averaged coordinates
    mySerial.print("$PQTGM,SETBASE,");
    mySerial.print(rtkLat, 8);
    mySerial.print(",");
    mySerial.print(rtkLng, 8);
    mySerial.print(",");
    mySerial.print(rtkAlt, 2);
    mySerial.println(",0.01"); // 1 cm assumed accuracy

     GPSBaseStation();
} else {
    Serial.println("Unable to calculate averaged position due to invalid readings.");
}

// End LittleFS
LittleFS.end();

}
Averaging GPS readings for base station…
Unable to calculate averaged position due to invalid readings.
Loaded previous RTK base station coordinates:
Latitude: 0.00000000
Longitude: 0.00000000
Altitude: 0.00
Averaging GPS readings for base station…
Unable to calculate averaged position due to invalid readings.
Loaded previous RTK base station coordinates:
Latitude: 0.00000000
Longitude: 0.00000000
Altitude: 0.00
Averaging GPS readings for base station…
Unable to calculate averaged position due to invalid readings.
Loaded previous RTK base station coordinates:
Latitude: 0.00000000
Longitude: 0.00000000
Altitude: 0.00
Averaging GPS readings for base station…
Unable to calculate averaged position due to invalid readings.
Loaded previous RTK base station coordinates:
Latitude: 0.00000000