Hello, I am making a flight computer with several sensors that logs data on a micro-SD card. I can get each of the sensors to work individually, and the SD card to work on its own, but when I combine it all, my file won't open to save the data. Is the SD error due to the low memory available? If so, what's a good way to save on storage? Thanks!
This is the message I get when I run it:
Sketch uses 23264 bytes (75%) of program storage space. Maximum is 30720 bytes.
Global variables use 1712 bytes (83%) of dynamic memory, leaving 336 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_MPL3115A2.h>
#include "MPU9250.h"
File dataFile;
MPU9250 IMU(Wire,0x68);
Adafruit_MPL3115A2 baro = Adafruit_MPL3115A2();
int status;
const int chipSelect = 4;
void setup() {
Serial.begin(9600);
status = IMU.begin();
pinMode(2, OUTPUT);
pinMode(8, OUTPUT);
while (!Serial){
Serial.print("Serial not connected!");
digitalWrite(8,true); //indicator LED
}
while (status < 0){
Serial.print("IMU not connected!");
digitalWrite(8,true);
}
while (!SD.begin(chipSelect)) {
Serial.println("SD initialization failed!");
digitalWrite(8,true);
}
while (! baro.begin()) {
Serial.println("Barometer Failed!");
digitalWrite(8,true);
}
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile){ //creates column titles
dataFile.println("Pressure(inches Hg), Altitude(m), Temp(*F), AccX(m/s), AccY(m/s), AccZ(m/s), GyroX(rad/s), GyroY(rad/s), GyroZ(rad/s)");
dataFile.close();
Serial.println("Pressure(inches Hg), Altitude(m), Temp(*F), AccX(m/s), AccY(m/s), AccZ(m/s), GyroX(rad/s), GyroY(rad/s), GyroZ(rad/s)");
}
digitalWrite(8,false);
} //end setup
void loop() {
IMU.readSensor();
String dataString = "";
float pascals = baro.getPressure(); //barometer data
float alt = baro.getAltitude();
float tempC = baro.getTemperature();
float accelX = IMU.getAccelX_mss(); //IMU data
float accelY = IMU.getAccelY_mss();
float accelZ = IMU.getAccelZ_mss();
float gyroX = IMU.getGyroX_rads();
float gyroY = IMU.getGyroY_rads();
float gyroZ = IMU.getGyroZ_rads();
dataString += String(pascals/3377); dataString += ",";
dataString += String(alt); dataString += ",";
dataString += String(tempC * 9 / 5 + 32); dataString += ",";
dataString += String(accelX); dataString += ",";
dataString += String(accelY); dataString += ",";
dataString += String(accelZ); dataString += ",";
dataString += String(gyroX); dataString += ",";
dataString += String(gyroY); dataString += ",";
dataString += String(gyroZ);
//Serial.print(dataString);
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if(!dataFile){
Serial.println(" Can't open dataFile");
digitalWrite(2,true); //indicator LEDs
digitalWrite(8,true);
while(1){} //stop if file doesn't open
}
if (dataFile){
dataFile.println(dataString);
dataFile.close();
Serial.println("Data Uploaded!");
}
delay(250);
}