SD card logging messing with GPS

Im working on a project where i need to data log to an sd card non stop and also get GPS data from a SAM-M10Q but for some reason the GPS chip cant get a fix if the data logging code is even just present, if i take the code out it works just fine. No idea why it wont work when data logging. Not sure how to fix this.
Here is my code:

#include <Wire.h>
#include <Adafruit_LIS3MDL.h>
#include <Adafruit_Sensor.h>
#include <SD.h>
#include "SparkFun_BMI270_Arduino_Library.h"
#include <SparkFun_u-blox_GNSS_v3.h>
#include "SdFat.h"
#include "RingBuf.h"
#include <SPI.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#include <Adafruit_MS8607.h>
#include <Adafruit_LSM6DSO32.h>
#include <Adafruit_INA260.h>
#include "Adafruit_BMP3XX.h"
#include <Arduino.h>
#include <Adafruit_BNO08x.h>
#include <MicroNMEA.h>
#define SEALEVELPRESSURE_HPA (1013.25)

#define SD_CONFIG  SdioConfig(FIFO_SDIO)
const int chipSelect = BUILTIN_SDCARD;
// Interval between points for 25 ksps.
#define LOG_INTERVAL_USEC 40
boolean checkstop = false;
// Size to log 10 byte lines at 25 kHz for more than ten minutes.
#define LOG_FILE_SIZE 10*25000*600  // 150,000,000 bytes.

// Space to hold more than 800 ms of data for 10 byte lines at 25 ksps.
#define RING_BUF_CAPACITY 400*512
#define LOG_FILENAME "SdioLogger.csv"

unsigned long timenow7 = 0;

//SdFs sd;
//FsFile file;

// RingBuf for File type FsFile.
//RingBuf<FsFile, RING_BUF_CAPACITY> rb;

BMI270 imu;
uint8_t i2cAddress = BMI2_I2C_PRIM_ADDR; 
Adafruit_INA260 ina260 = Adafruit_INA260();
Adafruit_LSM6DSO32 dso32;
Adafruit_LIS3MDL lis3mdl;
SFE_UBLOX_GNSS myGNSS;
Adafruit_BMP3XX bmp;
Adafruit_MS8607 ms8607;
#define PIN        4
#define NUMPIXELS 3
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


int x, y, z;
double roll = 0.00, pitch = 0.00;
#define BNO08X_RESET -1

struct euler_t {
  float yaw;
  float pitch;
  float roll;
} ypr;

Adafruit_BNO08x  bno08x(BNO08X_RESET);
sh2_SensorValue_t sensorValue;

#ifdef FAST_MODE
  // Top frequency is reported to be 1000Hz (but freq is somewhat variable)
  sh2_SensorId_t reportType = SH2_GYRO_INTEGRATED_RV;
  long reportIntervalUs = 2000;
#else
  // Top frequency is about 250Hz but this report is more accurate
  sh2_SensorId_t reportType = SH2_ARVR_STABILIZED_RV;
  long reportIntervalUs = 5000;
#endif
void setReports(sh2_SensorId_t reportType, long report_interval) {
  Serial.println("Setting desired reports");
  if (! bno08x.enableReport(reportType, report_interval)) {
    Serial.println("Could not enable stabilized remote vector");
  }
}

boolean onetime = false;
boolean onetime1 = false;
boolean onetime2 = false;
boolean onetime3 = false;
boolean onetime4 = false;
boolean onetime5 = false;
boolean onetime6 = false;
boolean onetime7 = false;
boolean onetime8 = false;
boolean onetime9 = false;
boolean onetime10 = false;
boolean onetime11 = false;
boolean onetime12 = false;
boolean onetime13 = false;
boolean onetime14 = false;
boolean onetime15 = false;
boolean onetime16 = false;
boolean onetime17 = false;
boolean onetime18 = false;

boolean ready = false;
boolean launch = false;
boolean apogge = false;
boolean inflight = false;
boolean land = false;
const int buzzer = 8;
int alt = 0.10;
boolean dataloglock = false;
void setup(){
    while(!Serial);
    Wire.begin(); 
    Serial.begin(115200);
    Serial.println("Starting up");
    tone(buzzer, 1000);

    if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    while (1) {
      // No SD card, so don't do anything more - stay stuck here
    }
  }
  Serial.println("card initialized.");

    
  if (!bno08x.begin_I2C(0x4B)) {
 
    Serial.println("BNO085 failed!");
    while (1) { delay(10); }
  }
  setReports(reportType, reportIntervalUs);
  Serial.println("BNO085 up");

  while (myGNSS.begin() == false) 
  {
    Serial.println("GPS Failed!");
    while(1);
  }
  myGNSS.setI2COutput(COM_TYPE_UBX); 
  
  myGNSS.setNavigationFrequency(4); 
  
  myGNSS.setAutoPVT(true); 

  Serial.println("GPS up");
  if (!bmp.begin_I2C()) {  
 
    Serial.println("BMP390 Failed!");
    while (1);
  }
  bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
  bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
  bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
  bmp.setOutputDataRate(BMP3_ODR_50_HZ);

  Serial.println("BMP390 up");

  if (!ms8607.begin()) {
    Serial.println("MS8607 Failed!");
    while (1) { delay(10); }
  }
  ms8607.setHumidityResolution(MS8607_HUMIDITY_RESOLUTION_OSR_8b);
  Serial.print("Humidity resolution set to ");
  switch (ms8607.getHumidityResolution()){
    case MS8607_HUMIDITY_RESOLUTION_OSR_12b: Serial.println("12-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_11b: Serial.println("11-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_10b: Serial.println("10-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_8b: Serial.println("8-bit"); break;
  }
  // ms8607.setPressureResolution(MS8607_PRESSURE_RESOLUTION_OSR_4096);
  Serial.print("Pressure and Temperature resolution set to ");
  switch (ms8607.getPressureResolution()){
    case MS8607_PRESSURE_RESOLUTION_OSR_256: Serial.println("256"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_512: Serial.println("512"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_1024: Serial.println("1024"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_2048: Serial.println("2048"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_4096: Serial.println("4096"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_8192: Serial.println("8192"); break;
  }

  Serial.println("MS8607 up");
  
   if (!lis3mdl.begin_I2C()) {     
  
    Serial.println("LIS3MDL Failed!");
    while(1);
  }
  lis3mdl.setPerformanceMode(LIS3MDL_ULTRAHIGHMODE);
  Serial.print("Performance mode set to: ");
  switch (lis3mdl.getPerformanceMode()) {
    case LIS3MDL_LOWPOWERMODE: Serial.println("Low"); break;
    case LIS3MDL_MEDIUMMODE: Serial.println("Medium"); break;
    case LIS3MDL_HIGHMODE: Serial.println("High"); break;
    case LIS3MDL_ULTRAHIGHMODE: Serial.println("Ultra-High"); break;
  }

  lis3mdl.setOperationMode(LIS3MDL_CONTINUOUSMODE);
  Serial.print("Operation mode set to: ");
  // Single shot mode will complete conversion and go into power down
  switch (lis3mdl.getOperationMode()) {
    case LIS3MDL_CONTINUOUSMODE: Serial.println("Continuous"); break;
    case LIS3MDL_SINGLEMODE: Serial.println("Single mode"); break;
    case LIS3MDL_POWERDOWNMODE: Serial.println("Power-down"); break;
  }

  lis3mdl.setDataRate(LIS3MDL_DATARATE_1000_HZ);
  // You can check the datarate by looking at the frequency of the DRDY pin
  Serial.print("Data rate set to: ");
  switch (lis3mdl.getDataRate()) {
    case LIS3MDL_DATARATE_0_625_HZ: Serial.println("0.625 Hz"); break;
    case LIS3MDL_DATARATE_1_25_HZ: Serial.println("1.25 Hz"); break;
    case LIS3MDL_DATARATE_2_5_HZ: Serial.println("2.5 Hz"); break;
    case LIS3MDL_DATARATE_5_HZ: Serial.println("5 Hz"); break;
    case LIS3MDL_DATARATE_10_HZ: Serial.println("10 Hz"); break;
    case LIS3MDL_DATARATE_20_HZ: Serial.println("20 Hz"); break;
    case LIS3MDL_DATARATE_40_HZ: Serial.println("40 Hz"); break;
    case LIS3MDL_DATARATE_80_HZ: Serial.println("80 Hz"); break;
    case LIS3MDL_DATARATE_155_HZ: Serial.println("155 Hz"); break;
    case LIS3MDL_DATARATE_300_HZ: Serial.println("300 Hz"); break;
    case LIS3MDL_DATARATE_560_HZ: Serial.println("560 Hz"); break;
    case LIS3MDL_DATARATE_1000_HZ: Serial.println("1000 Hz"); break;
  }
  
  lis3mdl.setRange(LIS3MDL_RANGE_16_GAUSS);
  Serial.print("Range set to: ");
  switch (lis3mdl.getRange()) {
    case LIS3MDL_RANGE_4_GAUSS: Serial.println("+-4 gauss"); break;
    case LIS3MDL_RANGE_8_GAUSS: Serial.println("+-8 gauss"); break;
    case LIS3MDL_RANGE_12_GAUSS: Serial.println("+-12 gauss"); break;
    case LIS3MDL_RANGE_16_GAUSS: Serial.println("+-16 gauss"); break;
  }

  lis3mdl.setIntThreshold(500);
  lis3mdl.configInterrupt(false, false, true, // enable z axis
                          true, // polarity
                          false, // don't latch
                          true); // enabled!

  Serial.println("LIS3MDL up");

   if (!ina260.begin(0x45)) {
    Serial.println("INA260 Failed!");
    while (1);
  }
  Serial.println("INA260 up");

    if (!dso32.begin_I2C()) {
       Serial.println("LSM6DSO32 Failed!");
    while(1);
  }
  dso32.setAccelRange(LSM6DSO32_ACCEL_RANGE_32_G);
  Serial.print("Accelerometer range set to: ");
  switch (dso32.getAccelRange()) {
  case LSM6DSO32_ACCEL_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case LSM6DSO32_ACCEL_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case LSM6DSO32_ACCEL_RANGE_16_G:
    Serial.println("+-16G");
    break;
  case LSM6DSO32_ACCEL_RANGE_32_G:
    Serial.println("+-32G");
    break;
  }

  // dso32.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS );
  Serial.print("Gyro range set to: ");
  switch (dso32.getGyroRange()) {
  case LSM6DS_GYRO_RANGE_125_DPS:
    Serial.println("125 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_250_DPS:
    Serial.println("250 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_500_DPS:
    Serial.println("500 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_1000_DPS:
    Serial.println("1000 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_2000_DPS:
    Serial.println("2000 degrees/s");
    break;
  case ISM330DHCX_GYRO_RANGE_4000_DPS:
    break; // unsupported range for the DSO32
  }

  // dso32.setAccelDataRate(LSM6DS_RATE_12_5_HZ);
  Serial.print("Accelerometer data rate set to: ");
  switch (dso32.getAccelDataRate()) {
  case LSM6DS_RATE_SHUTDOWN:
    Serial.println("0 Hz");
    break;
  case LSM6DS_RATE_12_5_HZ:
    Serial.println("12.5 Hz");
    break;
  case LSM6DS_RATE_26_HZ:
    Serial.println("26 Hz");
    break;
  case LSM6DS_RATE_52_HZ:
    Serial.println("52 Hz");
    break;
  case LSM6DS_RATE_104_HZ:
    Serial.println("104 Hz");
    break;
  case LSM6DS_RATE_208_HZ:
    Serial.println("208 Hz");
    break;
  case LSM6DS_RATE_416_HZ:
    Serial.println("416 Hz");
    break;
  case LSM6DS_RATE_833_HZ:
    Serial.println("833 Hz");
    break;
  case LSM6DS_RATE_1_66K_HZ:
    Serial.println("1.66 KHz");
    break;
  case LSM6DS_RATE_3_33K_HZ:
    Serial.println("3.33 KHz");
    break;
  case LSM6DS_RATE_6_66K_HZ:
    Serial.println("6.66 KHz");
    break;
  }

  // dso32.setGyroDataRate(LSM6DS_RATE_12_5_HZ);
  Serial.print("Gyro data rate set to: ");
  switch (dso32.getGyroDataRate()) {
  case LSM6DS_RATE_SHUTDOWN:
    Serial.println("0 Hz");
    break;
  case LSM6DS_RATE_12_5_HZ:
    Serial.println("12.5 Hz");
    break;
  case LSM6DS_RATE_26_HZ:
    Serial.println("26 Hz");
    break;
  case LSM6DS_RATE_52_HZ:
    Serial.println("52 Hz");
    break;
  case LSM6DS_RATE_104_HZ:
    Serial.println("104 Hz");
    break;
  case LSM6DS_RATE_208_HZ:
    Serial.println("208 Hz");
    break;
  case LSM6DS_RATE_416_HZ:
    Serial.println("416 Hz");
    break;
  case LSM6DS_RATE_833_HZ:
    Serial.println("833 Hz");
    break;
  case LSM6DS_RATE_1_66K_HZ:
    Serial.println("1.66 KHz");
    break;
  case LSM6DS_RATE_3_33K_HZ:
    Serial.println("3.33 KHz");
    break;
  case LSM6DS_RATE_6_66K_HZ:
    Serial.println("6.66 KHz");
    break;
  }
  Serial.println("LSM6DSO32 up");
  Serial.println("All done!");
  pixels.begin();
  noTone(buzzer);  

}
void quaternionToEuler(float qr, float qi, float qj, float qk, euler_t* ypr, bool degrees = false) {

    float sqr = sq(qr);
    float sqi = sq(qi);
    float sqj = sq(qj);
    float sqk = sq(qk);

    ypr->yaw = atan2(2.0 * (qi * qj + qk * qr), (sqi - sqj - sqk + sqr));
    ypr->pitch = asin(-2.0 * (qi * qk - qj * qr) / (sqi + sqj + sqk + sqr));
    ypr->roll = atan2(2.0 * (qj * qk + qi * qr), (-sqi - sqj + sqk + sqr));

    if (degrees) {
      ypr->yaw *= RAD_TO_DEG;
      ypr->pitch *= RAD_TO_DEG;
      ypr->roll *= RAD_TO_DEG;
    }
}

void quaternionToEulerRV(sh2_RotationVectorWAcc_t* rotational_vector, euler_t* ypr, bool degrees = false) {
    quaternionToEuler(rotational_vector->real, rotational_vector->i, rotational_vector->j, rotational_vector->k, ypr, degrees);
}

void quaternionToEulerGI(sh2_GyroIntegratedRV_t* rotational_vector, euler_t* ypr, bool degrees = false) {
    quaternionToEuler(rotational_vector->real, rotational_vector->i, rotational_vector->j, rotational_vector->k, ypr, degrees);
}

void setReports(void) {
  Serial.println("Setting desired reports");
  if (!bno08x.enableReport(SH2_ACCELEROMETER)) {
    Serial.println("Could not enable accelerometer");
  }
  if (!bno08x.enableReport(SH2_GYROSCOPE_CALIBRATED)) {
    Serial.println("Could not enable gyroscope");
  }
  if (!bno08x.enableReport(SH2_MAGNETIC_FIELD_CALIBRATED)) {
    Serial.println("Could not enable magnetic field calibrated");
  }
  if (!bno08x.enableReport(SH2_LINEAR_ACCELERATION)) {
    Serial.println("Could not enable linear acceleration");
  }
  if (!bno08x.enableReport(SH2_GRAVITY)) {
    Serial.println("Could not enable gravity vector");
  }
  if (!bno08x.enableReport(SH2_ROTATION_VECTOR)) {
    Serial.println("Could not enable rotation vector");
  }
  if (!bno08x.enableReport(SH2_GEOMAGNETIC_ROTATION_VECTOR)) {
    Serial.println("Could not enable geomagnetic rotation vector");
  }
  if (!bno08x.enableReport(SH2_GAME_ROTATION_VECTOR)) {
    Serial.println("Could not enable game rotation vector");
  }
  if (!bno08x.enableReport(SH2_STEP_COUNTER)) {
    Serial.println("Could not enable step counter");
  }
  if (!bno08x.enableReport(SH2_STABILITY_CLASSIFIER)) {
    Serial.println("Could not enable stability classifier");
  }
  if (!bno08x.enableReport(SH2_RAW_ACCELEROMETER)) {
    Serial.println("Could not enable raw accelerometer");
  }
  if (!bno08x.enableReport(SH2_RAW_GYROSCOPE)) {
    Serial.println("Could not enable raw gyroscope");
  }
  if (!bno08x.enableReport(SH2_RAW_MAGNETOMETER)) {
    Serial.println("Could not enable raw magnetometer");
  }
  if (!bno08x.enableReport(SH2_SHAKE_DETECTOR)) {
    Serial.println("Could not enable shake detector");
  }
  if (!bno08x.enableReport(SH2_PERSONAL_ACTIVITY_CLASSIFIER)) {
    Serial.println("Could not enable personal activity classifier");
  }
}
 
  

void loop(){

  

  if (bno08x.wasReset()) {
    Serial.print("sensor was reset ");
    setReports(reportType, reportIntervalUs);
  }
  
  if (bno08x.getSensorEvent(&sensorValue)) {
    // in this demo only one report type will be received depending on FAST_MODE define (above)
    switch (sensorValue.sensorId) {
      case SH2_ARVR_STABILIZED_RV:
        quaternionToEulerRV(&sensorValue.un.arvrStabilizedRV, &ypr, true);
      case SH2_GYRO_INTEGRATED_RV:
        // faster (more noise?)
        quaternionToEulerGI(&sensorValue.un.gyroIntegratedRV, &ypr, true);
        break;
    }
  }
  sensors_event_t accel;
  sensors_event_t gyro;
  sensors_event_t temp;
  dso32.getEvent(&accel, &gyro, &temp);
  lis3mdl.read();
  sensors_event_t event; 
  lis3mdl.getEvent(&event);
 
   sensors_event_t pressure, humidity;
    ms8607.getEvent(&pressure, &temp, &humidity);
  imu.getSensorData();


 if (myGNSS.getPVT() == true)
  {
    
    Serial.println();
    
    int32_t latitude = myGNSS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    int32_t longitude = myGNSS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);
    Serial.print(F(" (degrees * 10^-7)"));

    int32_t altitude = myGNSS.getAltitudeMSL(); // Altitude above Mean Sea Level
    Serial.print(F(" Alt: "));
    Serial.print(altitude);
    Serial.print(F(" (mm)"));

    Serial.println();
    long speed = myGNSS.getGroundSpeed();
    byte fixType = myGNSS.getFixType();
    if(fixType == 3){
      dataloglock = true;
      Serial.println("mhm");
    }
    /*
    File dataFile2 = SD.open("T0ver.csv", FILE_WRITE);
    dataFile2.print(millis());
    dataFile2.print(",");
    dataFile2.print(latitude);
    dataFile2.print(",");
    dataFile2.print(longitude);
    dataFile2.print(",");
    dataFile2.print(bmp.readAltitude(1013.25) - alt);
    dataFile2.print(",");
    dataFile2.print(speed / 447.04);
    dataFile2.print(",");
    dataFile2.println(ypr.roll);
    dataFile2.close();
    */
  }
  else
  {
    Serial.print(".");
   delay(50);
}
      File dataFile = SD.open("FlightData.csv", FILE_WRITE);
dataFile.print(millis());
dataFile.print(",");
dataFile.print("Alt: ");
dataFile.print(bmp.readAltitude(1013.25) - alt);
dataFile.print(",");
dataFile.print(" Voltage: ");
dataFile.print(ina260.readBusVoltage() / 1000);
dataFile.print(",");
dataFile.print(" MS8607: ");
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(pressure.pressure);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(temp.temperature);
dataFile.print(",");
dataFile.print(" Humidity: ");
dataFile.print(humidity.relative_humidity);
dataFile.print(",");
dataFile.print(" BMP390: ");
dataFile.print(",");
dataFile.print(" Alt Sealevel: ");
dataFile.print(bmp.readAltitude(1013.25));
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(bmp.readTemperature());
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(bmp.readPressure());
dataFile.print(",");
dataFile.print(" BNO085: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.accelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.accelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.accelerometer.z);
dataFile.print(",");
dataFile.print(" Linear Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.linearAcceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gyroscope.z);
dataFile.print(",");
dataFile.print(" MAG: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.magneticField.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.magneticField.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.magneticField.z);
dataFile.print(",");
dataFile.print(" Gravity: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gravity.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gravity.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gravity.z);
dataFile.print(",");
dataFile.print(" Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.rotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.rotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.rotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.rotationVector.k);
dataFile.print(",");
dataFile.print(" Geo-Magnetic Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.gameRotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.gameRotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.gameRotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.gameRotationVector.k);
dataFile.print(",");
dataFile.print(" Raw accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawAccelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawAccelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawAccelerometer.z);
dataFile.print(" Raw gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawGyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawGyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawGyroscope.z);
dataFile.print(",");
dataFile.print(" Raw mag: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawMagnetometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawMagnetometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawMagnetometer.z);
dataFile.print(",");
dataFile.print(" LSM6DOS32: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(accel.acceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(accel.acceleration.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(accel.acceleration.z);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(gyro.gyro.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(gyro.gyro.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(gyro.gyro.z);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.println(temp.temperature);

  


//dataFile.print(",");





  
  if(ready == true){
    if(bmp.readAltitude(1013.25) - alt >= 5.00){
      if(onetime1 == false){
        MCOLaunch();
        Launchbeep();
        onetime1 = true;
      }



      //----------------------launch stuff here
    }




  }else{
   if(bmp.readAltitude(1013.25) >= alt){
      alt++;
    }
    if(bmp.readAltitude(1013.25) <= alt){
      alt--;
    }
    if(bmp.readAltitude(1013.25) - alt <= 0.30){
      ready = true;
      Readybeep();
      MCOgreen();
    }else{
      MCOblue();
    }
  }
double x_Buff = float(accel.acceleration.x);
double y_Buff = float(accel.acceleration.y);
double z_Buff = float(accel.acceleration.z);
roll = atan2(y_Buff, z_Buff) * 57.3;
pitch = atan2((- x_Buff) , sqrt(y_Buff * y_Buff + z_Buff * z_Buff)) * 57.3;





}
void MCOgreen(){
   pixels.setPixelColor(1, pixels.Color(23, 255, 0 ));
   pixels.show();
}
void MCOred(){
   pixels.setPixelColor(1, pixels.Color(255, 0, 0 ));
   pixels.show();
}
void MCOblue(){
   pixels.setPixelColor(1, pixels.Color(0, 97, 255 ));
   pixels.show();
}
void MCOLaunch(){
  pixels.setPixelColor(1, pixels.Color(255, 0, 209 ));
  pixels.show();
}
void Readybeep(){
  tone(buzzer, 1000);
  delay(100);
  noTone(buzzer);
  delay(100);
  tone(buzzer, 1000);
  delay(100);
  noTone(buzzer);
}
void Launchbeep(){
  tone(buzzer, 1000);
}

Here is the code section that doesn't want to work:

 if (myGNSS.getPVT() == true)
  {
    
    Serial.println();
    
    int32_t latitude = myGNSS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    int32_t longitude = myGNSS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);
    Serial.print(F(" (degrees * 10^-7)"));

    int32_t altitude = myGNSS.getAltitudeMSL(); // Altitude above Mean Sea Level
    Serial.print(F(" Alt: "));
    Serial.print(altitude);
    Serial.print(F(" (mm)"));

    Serial.println();
    long speed = myGNSS.getGroundSpeed();
    byte fixType = myGNSS.getFixType();
    if(fixType == 3){
      dataloglock = true;
      Serial.println("mhm");
    }
    /*
    File dataFile2 = SD.open("T0ver.csv", FILE_WRITE);
    dataFile2.print(millis());
    dataFile2.print(",");
    dataFile2.print(latitude);
    dataFile2.print(",");
    dataFile2.print(longitude);
    dataFile2.print(",");
    dataFile2.print(bmp.readAltitude(1013.25) - alt);
    dataFile2.print(",");
    dataFile2.print(speed / 447.04);
    dataFile2.print(",");
    dataFile2.println(ypr.roll);
    dataFile2.close();
    */
  }
  else
  {
    Serial.print(".");
   delay(50);
  }
      File dataFile = SD.open("FlightData.csv", FILE_WRITE);
dataFile.print(millis());
dataFile.print(",");
dataFile.print("Alt: ");
dataFile.print(bmp.readAltitude(1013.25) - alt);
dataFile.print(",");
dataFile.print(" Voltage: ");
dataFile.print(ina260.readBusVoltage() / 1000);
dataFile.print(",");
dataFile.print(" MS8607: ");
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(pressure.pressure);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(temp.temperature);
dataFile.print(",");
dataFile.print(" Humidity: ");
dataFile.print(humidity.relative_humidity);
dataFile.print(",");
dataFile.print(" BMP390: ");
dataFile.print(",");
dataFile.print(" Alt Sealevel: ");
dataFile.print(bmp.readAltitude(1013.25));
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(bmp.readTemperature());
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(bmp.readPressure());
dataFile.print(",");
dataFile.print(" BNO085: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.accelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.accelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.accelerometer.z);
dataFile.print(",");
dataFile.print(" Linear Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.linearAcceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gyroscope.z);
dataFile.print(",");
dataFile.print(" MAG: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.magneticField.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.magneticField.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.magneticField.z);
dataFile.print(",");
dataFile.print(" Gravity: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gravity.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gravity.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gravity.z);
dataFile.print(",");
dataFile.print(" Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.rotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.rotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.rotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.rotationVector.k);
dataFile.print(",");
dataFile.print(" Geo-Magnetic Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.gameRotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.gameRotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.gameRotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.gameRotationVector.k);
dataFile.print(",");
dataFile.print(" Raw accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawAccelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawAccelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawAccelerometer.z);
dataFile.print(" Raw gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawGyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawGyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawGyroscope.z);
dataFile.print(",");
dataFile.print(" Raw mag: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawMagnetometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawMagnetometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawMagnetometer.z);
dataFile.print(",");
dataFile.print(" LSM6DOS32: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(accel.acceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(accel.acceleration.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(accel.acceleration.z);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(gyro.gyro.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(gyro.gyro.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(gyro.gyro.z);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.println(temp.temperature);

And here is the code that if i take out makes the GPS work.

   File dataFile = SD.open("FlightData.csv", FILE_WRITE);
dataFile.print(millis());
dataFile.print(",");
dataFile.print("Alt: ");
dataFile.print(bmp.readAltitude(1013.25) - alt);
dataFile.print(",");
dataFile.print(" Voltage: ");
dataFile.print(ina260.readBusVoltage() / 1000);
dataFile.print(",");
dataFile.print(" MS8607: ");
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(pressure.pressure);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(temp.temperature);
dataFile.print(",");
dataFile.print(" Humidity: ");
dataFile.print(humidity.relative_humidity);
dataFile.print(",");
dataFile.print(" BMP390: ");
dataFile.print(",");
dataFile.print(" Alt Sealevel: ");
dataFile.print(bmp.readAltitude(1013.25));
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(bmp.readTemperature());
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(bmp.readPressure());
dataFile.print(",");
dataFile.print(" BNO085: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.accelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.accelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.accelerometer.z);
dataFile.print(",");
dataFile.print(" Linear Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.linearAcceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gyroscope.z);
dataFile.print(",");
dataFile.print(" MAG: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.magneticField.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.magneticField.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.magneticField.z);
dataFile.print(",");
dataFile.print(" Gravity: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gravity.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gravity.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gravity.z);
dataFile.print(",");
dataFile.print(" Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.rotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.rotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.rotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.rotationVector.k);
dataFile.print(",");
dataFile.print(" Geo-Magnetic Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.gameRotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.gameRotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.gameRotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.gameRotationVector.k);
dataFile.print(",");
dataFile.print(" Raw accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawAccelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawAccelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawAccelerometer.z);
dataFile.print(" Raw gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawGyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawGyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawGyroscope.z);
dataFile.print(",");
dataFile.print(" Raw mag: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawMagnetometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawMagnetometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawMagnetometer.z);
dataFile.print(",");
dataFile.print(" LSM6DOS32: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(accel.acceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(accel.acceleration.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(accel.acceleration.z);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(gyro.gyro.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(gyro.gyro.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(gyro.gyro.z);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.println(temp.temperature);

Schematic?

I have it on a pcb with about 10 other chips and a Teensy 3.6, its really hard to see where the connections are going, the GPS chip is just hooked up via i2c. I can still send it if you want.

Where is the corresponding file close statement? Open the file once in setup() and close it again when done collecting data. It is unreasonable to write out all those ASCII data labels with every data block.

For this block:

    File dataFile2 = SD.open("T0ver.csv", FILE_WRITE);
    dataFile2.print(millis());
    dataFile2.print(",");
    dataFile2.print(latitude);
    dataFile2.print(",");
    dataFile2.print(longitude);
    dataFile2.print(",");
    dataFile2.print(bmp.readAltitude(1013.25) - alt);
    dataFile2.print(",");
    dataFile2.print(speed / 447.04);
    dataFile2.print(",");
    dataFile2.println(ypr.roll);
    dataFile2.close();

Opening a file, writing some data, then closing it again is a serious mistake that vastly increases the SD card failure and error rate, vastly increases the SD current draw, and is very slow, so it blocks GPS input.

Furthermore, having two files open at once can cause crashes due to memory problems.

Yea i knew that block in the you mentioned at the end was stupid, thats why i commented it out. I will try what you mentioned to do.

I moved opening the file to void setup and the GPS gets a fix, but now its not data logging at all.

If you don't close the file the data will be lost. It is a good idea to issue statements like datafile.flush() every so often, to update the file pointers. Then if the program crashes, you lose only the data since the last flush().

The Arduino SD library implementation is quite flaky. For serious data logging I recommend to use RPi modules, which are orders of magnitude more reliable.

1 Like

I added flush but it still wont work.

Please post the revised code.

#include <Wire.h>
#include <Adafruit_LIS3MDL.h>
#include <Adafruit_Sensor.h>
#include <SD.h>
#include "SparkFun_BMI270_Arduino_Library.h"
#include <SparkFun_u-blox_GNSS_v3.h>

#include "RingBuf.h"
#include <SPI.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#include <Adafruit_MS8607.h>
#include <Adafruit_LSM6DSO32.h>
#include <Adafruit_INA260.h>
#include "Adafruit_BMP3XX.h"
#include <Arduino.h>
#include <Adafruit_BNO08x.h>
#include <MicroNMEA.h>
#define SEALEVELPRESSURE_HPA (1013.25)


const int chipSelect = BUILTIN_SDCARD;


unsigned long timenow7 = 0;

//SdFs sd;
//FsFile file;

// RingBuf for File type FsFile.
//RingBuf<FsFile, RING_BUF_CAPACITY> rb;

BMI270 imu;
uint8_t i2cAddress = BMI2_I2C_PRIM_ADDR; 
Adafruit_INA260 ina260 = Adafruit_INA260();
Adafruit_LSM6DSO32 dso32;
Adafruit_LIS3MDL lis3mdl;
SFE_UBLOX_GNSS myGNSS;
Adafruit_BMP3XX bmp;
Adafruit_MS8607 ms8607;
#define PIN        4
#define NUMPIXELS 3
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


int x, y, z;
double roll = 0.00, pitch = 0.00;
#define BNO08X_RESET -1

struct euler_t {
  float yaw;
  float pitch;
  float roll;
} ypr;

Adafruit_BNO08x  bno08x(BNO08X_RESET);
sh2_SensorValue_t sensorValue;

#ifdef FAST_MODE
  // Top frequency is reported to be 1000Hz (but freq is somewhat variable)
  sh2_SensorId_t reportType = SH2_GYRO_INTEGRATED_RV;
  long reportIntervalUs = 2000;
#else
  // Top frequency is about 250Hz but this report is more accurate
  sh2_SensorId_t reportType = SH2_ARVR_STABILIZED_RV;
  long reportIntervalUs = 5000;
#endif
void setReports(sh2_SensorId_t reportType, long report_interval) {
  Serial.println("Setting desired reports");
  if (! bno08x.enableReport(reportType, report_interval)) {
    Serial.println("Could not enable stabilized remote vector");
  }
}
File dataFile;
boolean onetime = false;
boolean onetime1 = false;
boolean onetime2 = false;
boolean onetime3 = false;
boolean onetime4 = false;
boolean onetime5 = false;
boolean onetime6 = false;
boolean onetime7 = false;
boolean onetime8 = false;
boolean onetime9 = false;
boolean onetime10 = false;
boolean onetime11 = false;
boolean onetime12 = false;
boolean onetime13 = false;
boolean onetime14 = false;
boolean onetime15 = false;
boolean onetime16 = false;
boolean onetime17 = false;
boolean onetime18 = false;

boolean ready = false;
boolean launch = false;
boolean apogge = false;
boolean inflight = false;
boolean land = false;
const int buzzer = 8;
int alt = 0.10;
boolean dataloglock = false;
void setup(){
    while(!Serial);
    Wire.begin(); 
    Serial.begin(115200);
    Serial.println("Starting up");
    tone(buzzer, 1000);

    if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    while (1) {
      // No SD card, so don't do anything more - stay stuck here
    }
  }
  File dataFile = SD.open("FlightData.csv", FILE_WRITE);  
  Serial.println("card initialized.");

    
  if (!bno08x.begin_I2C(0x4B)) {
 
    Serial.println("BNO085 failed!");
    while (1) { delay(10); }
  }
  setReports(reportType, reportIntervalUs);
  Serial.println("BNO085 up");

  while (myGNSS.begin() == false) 
  {
    Serial.println("GPS Failed!");
    while(1);
  }
  myGNSS.setI2COutput(COM_TYPE_UBX); 
  
  myGNSS.setNavigationFrequency(2); 
  
  myGNSS.setAutoPVT(true); 

  Serial.println("GPS up");
  if (!bmp.begin_I2C()) {  
 
    Serial.println("BMP390 Failed!");
    while (1);
  }
  bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
  bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
  bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
  bmp.setOutputDataRate(BMP3_ODR_50_HZ);

  Serial.println("BMP390 up");

  if (!ms8607.begin()) {
    Serial.println("MS8607 Failed!");
    while (1) { delay(10); }
  }
  ms8607.setHumidityResolution(MS8607_HUMIDITY_RESOLUTION_OSR_8b);
  Serial.print("Humidity resolution set to ");
  switch (ms8607.getHumidityResolution()){
    case MS8607_HUMIDITY_RESOLUTION_OSR_12b: Serial.println("12-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_11b: Serial.println("11-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_10b: Serial.println("10-bit"); break;
    case MS8607_HUMIDITY_RESOLUTION_OSR_8b: Serial.println("8-bit"); break;
  }
  // ms8607.setPressureResolution(MS8607_PRESSURE_RESOLUTION_OSR_4096);
  Serial.print("Pressure and Temperature resolution set to ");
  switch (ms8607.getPressureResolution()){
    case MS8607_PRESSURE_RESOLUTION_OSR_256: Serial.println("256"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_512: Serial.println("512"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_1024: Serial.println("1024"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_2048: Serial.println("2048"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_4096: Serial.println("4096"); break;
    case MS8607_PRESSURE_RESOLUTION_OSR_8192: Serial.println("8192"); break;
  }

  Serial.println("MS8607 up");
  
   if (!lis3mdl.begin_I2C()) {     
  
    Serial.println("LIS3MDL Failed!");
    while(1);
  }
  lis3mdl.setPerformanceMode(LIS3MDL_ULTRAHIGHMODE);
  Serial.print("Performance mode set to: ");
  switch (lis3mdl.getPerformanceMode()) {
    case LIS3MDL_LOWPOWERMODE: Serial.println("Low"); break;
    case LIS3MDL_MEDIUMMODE: Serial.println("Medium"); break;
    case LIS3MDL_HIGHMODE: Serial.println("High"); break;
    case LIS3MDL_ULTRAHIGHMODE: Serial.println("Ultra-High"); break;
  }

  lis3mdl.setOperationMode(LIS3MDL_CONTINUOUSMODE);
  Serial.print("Operation mode set to: ");
  // Single shot mode will complete conversion and go into power down
  switch (lis3mdl.getOperationMode()) {
    case LIS3MDL_CONTINUOUSMODE: Serial.println("Continuous"); break;
    case LIS3MDL_SINGLEMODE: Serial.println("Single mode"); break;
    case LIS3MDL_POWERDOWNMODE: Serial.println("Power-down"); break;
  }

  lis3mdl.setDataRate(LIS3MDL_DATARATE_1000_HZ);
  // You can check the datarate by looking at the frequency of the DRDY pin
  Serial.print("Data rate set to: ");
  switch (lis3mdl.getDataRate()) {
    case LIS3MDL_DATARATE_0_625_HZ: Serial.println("0.625 Hz"); break;
    case LIS3MDL_DATARATE_1_25_HZ: Serial.println("1.25 Hz"); break;
    case LIS3MDL_DATARATE_2_5_HZ: Serial.println("2.5 Hz"); break;
    case LIS3MDL_DATARATE_5_HZ: Serial.println("5 Hz"); break;
    case LIS3MDL_DATARATE_10_HZ: Serial.println("10 Hz"); break;
    case LIS3MDL_DATARATE_20_HZ: Serial.println("20 Hz"); break;
    case LIS3MDL_DATARATE_40_HZ: Serial.println("40 Hz"); break;
    case LIS3MDL_DATARATE_80_HZ: Serial.println("80 Hz"); break;
    case LIS3MDL_DATARATE_155_HZ: Serial.println("155 Hz"); break;
    case LIS3MDL_DATARATE_300_HZ: Serial.println("300 Hz"); break;
    case LIS3MDL_DATARATE_560_HZ: Serial.println("560 Hz"); break;
    case LIS3MDL_DATARATE_1000_HZ: Serial.println("1000 Hz"); break;
  }
  
  lis3mdl.setRange(LIS3MDL_RANGE_16_GAUSS);
  Serial.print("Range set to: ");
  switch (lis3mdl.getRange()) {
    case LIS3MDL_RANGE_4_GAUSS: Serial.println("+-4 gauss"); break;
    case LIS3MDL_RANGE_8_GAUSS: Serial.println("+-8 gauss"); break;
    case LIS3MDL_RANGE_12_GAUSS: Serial.println("+-12 gauss"); break;
    case LIS3MDL_RANGE_16_GAUSS: Serial.println("+-16 gauss"); break;
  }

  lis3mdl.setIntThreshold(500);
  lis3mdl.configInterrupt(false, false, true, // enable z axis
                          true, // polarity
                          false, // don't latch
                          true); // enabled!

  Serial.println("LIS3MDL up");

   if (!ina260.begin(0x45)) {
    Serial.println("INA260 Failed!");
    while (1);
  }
  Serial.println("INA260 up");

    if (!dso32.begin_I2C()) {
       Serial.println("LSM6DSO32 Failed!");
    while(1);
  }
  dso32.setAccelRange(LSM6DSO32_ACCEL_RANGE_32_G);
  Serial.print("Accelerometer range set to: ");
  switch (dso32.getAccelRange()) {
  case LSM6DSO32_ACCEL_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case LSM6DSO32_ACCEL_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case LSM6DSO32_ACCEL_RANGE_16_G:
    Serial.println("+-16G");
    break;
  case LSM6DSO32_ACCEL_RANGE_32_G:
    Serial.println("+-32G");
    break;
  }

  // dso32.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS );
  Serial.print("Gyro range set to: ");
  switch (dso32.getGyroRange()) {
  case LSM6DS_GYRO_RANGE_125_DPS:
    Serial.println("125 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_250_DPS:
    Serial.println("250 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_500_DPS:
    Serial.println("500 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_1000_DPS:
    Serial.println("1000 degrees/s");
    break;
  case LSM6DS_GYRO_RANGE_2000_DPS:
    Serial.println("2000 degrees/s");
    break;
  case ISM330DHCX_GYRO_RANGE_4000_DPS:
    break; // unsupported range for the DSO32
  }

  // dso32.setAccelDataRate(LSM6DS_RATE_12_5_HZ);
  Serial.print("Accelerometer data rate set to: ");
  switch (dso32.getAccelDataRate()) {
  case LSM6DS_RATE_SHUTDOWN:
    Serial.println("0 Hz");
    break;
  case LSM6DS_RATE_12_5_HZ:
    Serial.println("12.5 Hz");
    break;
  case LSM6DS_RATE_26_HZ:
    Serial.println("26 Hz");
    break;
  case LSM6DS_RATE_52_HZ:
    Serial.println("52 Hz");
    break;
  case LSM6DS_RATE_104_HZ:
    Serial.println("104 Hz");
    break;
  case LSM6DS_RATE_208_HZ:
    Serial.println("208 Hz");
    break;
  case LSM6DS_RATE_416_HZ:
    Serial.println("416 Hz");
    break;
  case LSM6DS_RATE_833_HZ:
    Serial.println("833 Hz");
    break;
  case LSM6DS_RATE_1_66K_HZ:
    Serial.println("1.66 KHz");
    break;
  case LSM6DS_RATE_3_33K_HZ:
    Serial.println("3.33 KHz");
    break;
  case LSM6DS_RATE_6_66K_HZ:
    Serial.println("6.66 KHz");
    break;
  }

  // dso32.setGyroDataRate(LSM6DS_RATE_12_5_HZ);
  Serial.print("Gyro data rate set to: ");
  switch (dso32.getGyroDataRate()) {
  case LSM6DS_RATE_SHUTDOWN:
    Serial.println("0 Hz");
    break;
  case LSM6DS_RATE_12_5_HZ:
    Serial.println("12.5 Hz");
    break;
  case LSM6DS_RATE_26_HZ:
    Serial.println("26 Hz");
    break;
  case LSM6DS_RATE_52_HZ:
    Serial.println("52 Hz");
    break;
  case LSM6DS_RATE_104_HZ:
    Serial.println("104 Hz");
    break;
  case LSM6DS_RATE_208_HZ:
    Serial.println("208 Hz");
    break;
  case LSM6DS_RATE_416_HZ:
    Serial.println("416 Hz");
    break;
  case LSM6DS_RATE_833_HZ:
    Serial.println("833 Hz");
    break;
  case LSM6DS_RATE_1_66K_HZ:
    Serial.println("1.66 KHz");
    break;
  case LSM6DS_RATE_3_33K_HZ:
    Serial.println("3.33 KHz");
    break;
  case LSM6DS_RATE_6_66K_HZ:
    Serial.println("6.66 KHz");
    break;
  }
  Serial.println("LSM6DSO32 up");
  Serial.println("All done!");
  pixels.begin();
  noTone(buzzer);
  
  

}
void quaternionToEuler(float qr, float qi, float qj, float qk, euler_t* ypr, bool degrees = false) {

    float sqr = sq(qr);
    float sqi = sq(qi);
    float sqj = sq(qj);
    float sqk = sq(qk);

    ypr->yaw = atan2(2.0 * (qi * qj + qk * qr), (sqi - sqj - sqk + sqr));
    ypr->pitch = asin(-2.0 * (qi * qk - qj * qr) / (sqi + sqj + sqk + sqr));
    ypr->roll = atan2(2.0 * (qj * qk + qi * qr), (-sqi - sqj + sqk + sqr));

    if (degrees) {
      ypr->yaw *= RAD_TO_DEG;
      ypr->pitch *= RAD_TO_DEG;
      ypr->roll *= RAD_TO_DEG;
    }
}

void quaternionToEulerRV(sh2_RotationVectorWAcc_t* rotational_vector, euler_t* ypr, bool degrees = false) {
    quaternionToEuler(rotational_vector->real, rotational_vector->i, rotational_vector->j, rotational_vector->k, ypr, degrees);
}

void quaternionToEulerGI(sh2_GyroIntegratedRV_t* rotational_vector, euler_t* ypr, bool degrees = false) {
    quaternionToEuler(rotational_vector->real, rotational_vector->i, rotational_vector->j, rotational_vector->k, ypr, degrees);
}

void setReports(void) {
  Serial.println("Setting desired reports");
  if (!bno08x.enableReport(SH2_ACCELEROMETER)) {
    Serial.println("Could not enable accelerometer");
  }
  if (!bno08x.enableReport(SH2_GYROSCOPE_CALIBRATED)) {
    Serial.println("Could not enable gyroscope");
  }
  if (!bno08x.enableReport(SH2_MAGNETIC_FIELD_CALIBRATED)) {
    Serial.println("Could not enable magnetic field calibrated");
  }
  if (!bno08x.enableReport(SH2_LINEAR_ACCELERATION)) {
    Serial.println("Could not enable linear acceleration");
  }
  if (!bno08x.enableReport(SH2_GRAVITY)) {
    Serial.println("Could not enable gravity vector");
  }
  if (!bno08x.enableReport(SH2_ROTATION_VECTOR)) {
    Serial.println("Could not enable rotation vector");
  }
  if (!bno08x.enableReport(SH2_GEOMAGNETIC_ROTATION_VECTOR)) {
    Serial.println("Could not enable geomagnetic rotation vector");
  }
  if (!bno08x.enableReport(SH2_GAME_ROTATION_VECTOR)) {
    Serial.println("Could not enable game rotation vector");
  }
  if (!bno08x.enableReport(SH2_STEP_COUNTER)) {
    Serial.println("Could not enable step counter");
  }
  if (!bno08x.enableReport(SH2_STABILITY_CLASSIFIER)) {
    Serial.println("Could not enable stability classifier");
  }
  if (!bno08x.enableReport(SH2_RAW_ACCELEROMETER)) {
    Serial.println("Could not enable raw accelerometer");
  }
  if (!bno08x.enableReport(SH2_RAW_GYROSCOPE)) {
    Serial.println("Could not enable raw gyroscope");
  }
  if (!bno08x.enableReport(SH2_RAW_MAGNETOMETER)) {
    Serial.println("Could not enable raw magnetometer");
  }
  if (!bno08x.enableReport(SH2_SHAKE_DETECTOR)) {
    Serial.println("Could not enable shake detector");
  }
  if (!bno08x.enableReport(SH2_PERSONAL_ACTIVITY_CLASSIFIER)) {
    Serial.println("Could not enable personal activity classifier");
  }
}
 
  

void loop(){

  

  if (bno08x.wasReset()) {
    Serial.print("sensor was reset ");
    setReports(reportType, reportIntervalUs);
  }
  
  if (bno08x.getSensorEvent(&sensorValue)) {
    // in this demo only one report type will be received depending on FAST_MODE define (above)
    switch (sensorValue.sensorId) {
      case SH2_ARVR_STABILIZED_RV:
        quaternionToEulerRV(&sensorValue.un.arvrStabilizedRV, &ypr, true);
      case SH2_GYRO_INTEGRATED_RV:
        // faster (more noise?)
        quaternionToEulerGI(&sensorValue.un.gyroIntegratedRV, &ypr, true);
        break;
    }
  }
  sensors_event_t accel;
  sensors_event_t gyro;
  sensors_event_t temp;
  dso32.getEvent(&accel, &gyro, &temp);
  lis3mdl.read();
  sensors_event_t event; 
  lis3mdl.getEvent(&event);
 
   sensors_event_t pressure, humidity;
    ms8607.getEvent(&pressure, &temp, &humidity);
  imu.getSensorData();


 if (myGNSS.getPVT() == true)
  {
    
    Serial.println();
    
    int32_t latitude = myGNSS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    int32_t longitude = myGNSS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);
    Serial.print(F(" (degrees * 10^-7)"));

    int32_t altitude = myGNSS.getAltitudeMSL(); // Altitude above Mean Sea Level
    Serial.print(F(" Alt: "));
    Serial.print(altitude);
    Serial.print(F(" (mm)"));

    Serial.println();
    long speed = myGNSS.getGroundSpeed();
    byte fixType = myGNSS.getFixType();
    if(fixType == 3){
      dataloglock = true;
      Serial.println("mhm");
    }
    /*
    File dataFile2 = SD.open("T0ver.csv", FILE_WRITE);
    dataFile2.print(millis());
    dataFile2.print(",");
    dataFile2.print(latitude);
    dataFile2.print(",");
    dataFile2.print(longitude);
    dataFile2.print(",");
    dataFile2.print(bmp.readAltitude(1013.25) - alt);
    dataFile2.print(",");
    dataFile2.print(speed / 447.04);
    dataFile2.print(",");
    dataFile2.println(ypr.roll);
    dataFile2.close();
    */
  }
  else
  {
    Serial.print(".");
   delay(50);
  }


dataFile.print(millis());
dataFile.print(",");
dataFile.print("Alt: ");
dataFile.print(bmp.readAltitude(1013.25) - alt);
dataFile.print(",");
dataFile.print(" Voltage: ");
dataFile.print(ina260.readBusVoltage() / 1000);
dataFile.print(",");
dataFile.print(" MS8607: ");
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(pressure.pressure);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(temp.temperature);
dataFile.print(",");
dataFile.print(" Humidity: ");
dataFile.print(humidity.relative_humidity);
dataFile.print(",");
dataFile.print(" BMP390: ");
dataFile.print(",");
dataFile.print(" Alt Sealevel: ");
dataFile.print(bmp.readAltitude(1013.25));
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.print(bmp.readTemperature());
dataFile.print(",");
dataFile.print(" Pressure: ");
dataFile.print(bmp.readPressure());
dataFile.print(",");
dataFile.print(" BNO085: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.accelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.accelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.accelerometer.z);
dataFile.print(",");
dataFile.print(" Linear Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.linearAcceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.linearAcceleration.y);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gyroscope.z);
dataFile.print(",");
dataFile.print(" MAG: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.magneticField.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.magneticField.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.magneticField.z);
dataFile.print(",");
dataFile.print(" Gravity: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.gravity.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.gravity.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.gravity.z);
dataFile.print(",");
dataFile.print(" Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.rotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.rotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.rotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.rotationVector.k);
dataFile.print(",");
dataFile.print(" Geo-Magnetic Rotation Vector: ");
dataFile.print(",");
dataFile.print(" R: ");
dataFile.print(sensorValue.un.gameRotationVector.real);
dataFile.print(",");
dataFile.print(" I: ");
dataFile.print(sensorValue.un.gameRotationVector.i);
dataFile.print(",");
dataFile.print(" J: ");
dataFile.print(sensorValue.un.gameRotationVector.j);
dataFile.print(",");
dataFile.print(" K: ");
dataFile.print(sensorValue.un.gameRotationVector.k);
dataFile.print(",");
dataFile.print(" Raw accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawAccelerometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawAccelerometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawAccelerometer.z);
dataFile.print(" Raw gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawGyroscope.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawGyroscope.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawGyroscope.z);
dataFile.print(",");
dataFile.print(" Raw mag: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(sensorValue.un.rawMagnetometer.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(sensorValue.un.rawMagnetometer.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(sensorValue.un.rawMagnetometer.z);
dataFile.print(",");
dataFile.print(" LSM6DOS32: ");
dataFile.print(",");
dataFile.print(" Accelerometer: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(accel.acceleration.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(accel.acceleration.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(accel.acceleration.z);
dataFile.print(",");
dataFile.print(" Gyro: ");
dataFile.print(",");
dataFile.print(" X: ");
dataFile.print(gyro.gyro.x);
dataFile.print(",");
dataFile.print(" Y: ");
dataFile.print(gyro.gyro.y);
dataFile.print(",");
dataFile.print(" Z: ");
dataFile.print(gyro.gyro.z);
dataFile.print(",");
dataFile.print(" Temp: ");
dataFile.println(temp.temperature);
dataFile.flush();

  


//dataFile.print(",");





  
  if(ready == true){
    if(bmp.readAltitude(1013.25) - alt >= 5.00){
      if(onetime1 == false){
        MCOLaunch();
        Launchbeep();
        onetime1 = true;
      }



      //----------------------launch stuff here
    }




  }else{
   if(bmp.readAltitude(1013.25) >= alt){
      alt++;
    }
    if(bmp.readAltitude(1013.25) <= alt){
      alt--;
    }
    if(bmp.readAltitude(1013.25) - alt <= 0.30){
      ready = true;
      Readybeep();
      MCOgreen();
    }else{
      MCOblue();
    }
  }
double x_Buff = float(accel.acceleration.x);
double y_Buff = float(accel.acceleration.y);
double z_Buff = float(accel.acceleration.z);
roll = atan2(y_Buff, z_Buff) * 57.3;
pitch = atan2((- x_Buff) , sqrt(y_Buff * y_Buff + z_Buff * z_Buff)) * 57.3;





}
void MCOgreen(){
   pixels.setPixelColor(1, pixels.Color(23, 255, 0 ));
   pixels.show();
}
void MCOred(){
   pixels.setPixelColor(1, pixels.Color(255, 0, 0 ));
   pixels.show();
}
void MCOblue(){
   pixels.setPixelColor(1, pixels.Color(0, 97, 255 ));
   pixels.show();
}
void MCOLaunch(){
  pixels.setPixelColor(1, pixels.Color(255, 0, 209 ));
  pixels.show();
}
void Readybeep(){
  tone(buzzer, 1000);
  delay(100);
  noTone(buzzer);
  delay(100);
  tone(buzzer, 1000);
  delay(100);
  noTone(buzzer);
}
void Launchbeep(){
  tone(buzzer, 1000);
}

I don't see a datafile.close() statement, although I would expect .flush() to yield some useful data after a couple of loop function cycles.

Possibly the card has been corrupted. Most people find error checking to be helpful, for example:

 myFile = SD.open("test.txt", FILE_WRITE);
  if (!myFile) Serial.println("SD file open error");

I removed the "File" from File dataFile = SD.open ect..... and now it works? Little strage but yea. Ill see if it works long side the GPS once it stops snowing where i live.

"dataFile" was already declared as global, so this

  File dataFile = SD.open("FlightData.csv", FILE_WRITE);  

defines a new local variable. I should have noticed that.

1 Like

So its data logging now but it still wont get a GPS fix. Same thing, if i remove the data logging code it works just fine.

I came up with a fix, well more of a work around. I just wait to data log until it has a fix, not how i wanted to do it but it will work. I suspect this might be a library compatibility issue.

If the SD card is being used in SPI mode, it is convenient to save data in chunks of 512 bytes. I don't know how much RAM you can use on your board—maybe save 1-2 MB in a buffer and then save it to the SD.

Also, in the code that messes up the GPS, why don't you add Serial.print just for debugging reasons?

Im using a custom Teensy 3.6 with its built in SD slot. I don't think adding serial print for debugging would work because its not hanging or anything, the GPS just wont get a fix with the SD logging code present.

How do you know?

Is the Arduino receiving complete NMEA serial sentences from the GPS, when data logging is active?

I don't think adding serial print for debugging would work

I think it will.

BTW since you are using Sparkfun library code, you might have better luck posting on the Sparkfun forum. Professional engineers monitor it.

Actually yea i didn't think that it might be getting a fix but the code doesn't see that. I suspect that the SD logging code is messing with the nmea sentences, not sure why or how, and yea i might ask the Sparkfun forum.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.