Ok so I changed the "quote" to "code", and now my code should be easier to read
I'm currently working on a near space balloon engineering project for school, and right now when I try to log data to a micro SD card from multiple sensors, whenever it finishes logging and I check the micro SD card the data becomes all garbled up
Here's the code:
#include <SD.h>
#include <Wire.h>
#include <ADXL345.h>
#include <Adafruit_BMP085.h>
File dataFile;
int gyroPin = 0;
int gyroZero = 495;
int tiltXPin = 1;
int tiltYPin = 2;
unsigned long millisecond;
Adafruit_BMP085 bmp;
#define THRESH_TAP 0x40
#define OFSX 0
#define OFSY 0
#define OFSZ 0
#define DUR 0x30
#define LATENT 0x40
#define WINDOW 0xFF
#define THRESH_ACT 0
#define THRESH_INACT 0
#define TIME_INACT 0
#define ACT_INACT_CTL 0
#define THRESH_FF 0
#define TIME_FF 0
#define TAP_AXES B00000111
#define BW_RATE 0
#define POWER_CTL B00001001
#define INT_ENABLE B01100000
#define INT_MAP B00100000
#define DATA_FORMAT B00001010
#define FIFO_CTL 0
byte X0, X1;
byte Y0, Y1;
byte Z0, Z1;
byte int_source;
ADXL345 myACC;
int operationCount = 0;
void setup() {
Serial.begin(9600);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(0, INPUT);
pinMode(10, OUTPUT);
myACC.setTHRESH_TAP(THRESH_TAP);
myACC.setDUR(DUR);
myACC.setLATENT(LATENT);
myACC.setWINDOW(WINDOW);
myACC.setTAP_AXES(TAP_AXES);
myACC.setPOWER_CTL(POWER_CTL);
myACC.setINT_MAP(INT_MAP);
myACC.setDATA_FORMAT(DATA_FORMAT);
myACC.setINT_ENABLE(INT_ENABLE);
if (!SD.begin(10)) {
Serial.println("SD init fail");
delay(1000);
setup();
}
else {
Serial.println("SD init'd");
Serial.println();
}
}
void loop() {
// start writing readings to file
Serial.print("accl start ");
dataFile = SD.open("log.csv", FILE_WRITE);
Serial.print("accl writing ");
// initialize accelerometer
myACC.readDATAX(&X0, &X1);
dataFile.print(X0 + (X1 << 8));
dataFile.print(",");
myACC.readDATAY(&Y0, &Y1);
dataFile.print(Y0 + (Y1 << 8));
dataFile.print(",");
myACC.readDATAZ(&Z0, &Z1);
dataFile.print(Z0 + (Z1 << 8));
dataFile.print(",");
//myACC.readINT_SOURCE(&int_source);
dataFile.close();
Serial.println("accl idle");
// initialize gyro
Serial.print("gyro start ");
dataFile = SD.open("log.csv", FILE_WRITE);
Serial.print("gyro writing ");
int numberOfReadings = 30;
int runningVal;
int runningValForAvg = 0;
int avgVal;
int maxVal = 0;
for (int i=0;i<numberOfReadings;i++) {
runningVal = abs(analogRead(gyroPin)-gyroZero);
runningValForAvg += runningVal;
if (runningVal > maxVal) {
maxVal = runningVal;
}
}
avgVal = runningValForAvg / numberOfReadings;
dataFile.print(maxVal);
dataFile.print(",");
dataFile.print(avgVal);
dataFile.print(",");
dataFile.close();
Serial.println("gyro idle");
// initialize tilt sensor
Serial.print("tilt start ");
dataFile = SD.open("log.csv", FILE_WRITE);
Serial.print("tilt writing ");
float tiltX = analogRead(tiltXPin);
float tiltY = analogRead(tiltYPin);
dataFile.print(tiltX);
dataFile.print(",");
dataFile.print(tiltY);
dataFile.print(",");
dataFile.close();
Serial.println("tilt idle");
// initialize barometer
Serial.print("baro start ");
dataFile = SD.open("log.csv", FILE_WRITE);
Serial.print("baro writing ");
dataFile.print(bmp.readTemperature());
dataFile.print(",");
dataFile.print(bmp.readPressure());
dataFile.print(",");
dataFile.print(bmp.readAltitude());
dataFile.print(",");
dataFile.print(bmp.readAltitude(101500));
dataFile.print(",");
dataFile.close();
Serial.println("baro idle");
// initialize time
Serial.print("time start ");
dataFile = SD.open("log.csv", FILE_WRITE);
Serial.print("time writing ");
millisecond = millis();
int second = millisecond/1000;
millisecond = millisecond - (second*1000);
int minute = second/60;
second = second - (minute*60);
int hour = minute/60;
minute = minute - (hour*60);
dataFile.print(millisecond);
dataFile.print(",");
dataFile.print(second);
dataFile.print(",");
dataFile.print(minute);
dataFile.print(",");
dataFile.println(hour);
dataFile.close();
Serial.println("time idle");
Serial.println();
operationCount = operationCount + 1;
if (operationCount >= 10) {
Serial.println("halt");
halt();
}
delay(2500);
}
void halt() {
while (1);
}
And here's the data output (note how it was only supposed to log 10 times whereas in the output it was logged 20 times with incorrect data in between):
4,5,253,2,0,504.00,509.00,238,0,0,0
6,5,252,3,0,504.00,509.00,827,2,0,0
5,5,253,3,1,503.00,509.00,415,5,0,0
6,5,253,2,0,503.00,509.00,4,8,0,0
5,4,254,3,1,504.00,509.00,593,10,0,0
5,5,252,2,0,505.00,509.00,180,13,0,0
5,6,255,2,0,504.00,509.00,769,15,0,0
4,5,253,2,0,504.00,509.00,358,18,0,0
7,4,253,2,0,504.00,509.00,946,20,0,0
6,4,252,2,0,504.00,509.00,534,23,0,0
3,6,253,2,0,506.00,512.00,102,0,0,0
7,4,254,2,0,503.00,509.00,691,2,0,0
5,5,252,3,0,504.00,509.00,279,5,0,0
5,6,252,2,0,503.00,509.00,867,7,0,0
5,4,252,2,0,503.00,509.00,460,10,0,0
5,5,253,3,0,504.00,509.00,48,13,0,0
5,5,254,3,0,504.00,509.00,637,15,0,0
5,5,252,2,0,503.00,509.00,226,18,0,0
5,4,253,2,0,503.00,509.00,814,20,0,0
5,6,253,2,0,504.00,509.00,404,23,0,0
Please help... I really don't know what to do! :~