I'm fairly new to Arduino and wanted to know how I could save some data collected by some LI3DH accelerometers so that I could later extract it with another program for calculations. Right now my code is:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
double xOffset; //Calibration constants to normalize data
double xRange;
double yOffset;
double yRange;
double zOffset;
double zRange;
void setup(void) {
delay(5000); //Gives 5 seconds to open serial monitor
Serial.begin(115200);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
if (! lis.begin(0x18)) { //Checks all chips
Serial.println("0x18 couldn't start");
if (! lis.begin(0x19)){
Serial.println("0x19 couldn't start");
}
while (1);
}
lis.setRange(LIS3DH_RANGE_2_G); //Sets measurement range
lis.setDataRate(LIS3DH_DATARATE_LOWPOWER_5KHZ); //Sets data rate
}
void readChip(int part) {
switch (part) {
case 2: {
digitalWrite(A0, LOW); //Sets 2 to 0x18, enabling
digitalWrite(A1, HIGH); //Sets 3 to 0x19, disabling
digitalWrite(A2, HIGH); //Sets 4 to 0x19, disabling
digitalWrite(A3, HIGH); //Sets 4 to 0x19, disabling
xOffset = -0.276;
xRange = 9.44;
yOffset = 0.06;
yRange = 9.53;
zOffset = -0.23;
zRange = 9.39;
break;
}
case 3: {
digitalWrite(A0, HIGH); //Sets 2 to 0x19 disabling
digitalWrite(A1, LOW); //Sets 3 to 0x18, enabling
digitalWrite(A2, HIGH); //Sets 4 to 0x19, disabling
digitalWrite(A3, HIGH); //Sets 4 to 0x19, disabling
xOffset = -0.11;
xRange = 9.66;
yOffset = 0.17;
yRange = 9.55;
zOffset = -0.175;
zRange = 9.89;
break;
}
case 4: {
digitalWrite(A0, HIGH); //Sets 2 to 0x19 disabling
digitalWrite(A1, HIGH); //Sets 3 to 0x19, disabling
digitalWrite(A2, LOW); //Sets 4 to 0x18, enabling
digitalWrite(A3, HIGH); //Sets 4 to 0x19, disabling
xOffset = -0.265;
xRange = 9.69;
yOffset = -0.23;
yRange = 9.39;
zOffset = -0.12;
zRange = 9.89;
break;
}
case 5: {
digitalWrite(A0, HIGH); //Sets 2 to 0x19 disabling
digitalWrite(A1, HIGH); //Sets 3 to 0x19, disabling
digitalWrite(A2, HIGH); //Sets 4 to 0x19, disabling
digitalWrite(A3, LOW); //Sets 4 to 0x18, enabling
xOffset = -0.29;
xRange = 9.51;
yOffset = 0.12;
yRange = 9.66;
zOffset = -0.07;
zRange = 9.815;
break;
}
}
lis.read(); //Read from chosen chip
sensors_event_t event;
lis.getEvent(&event);
double xOrig = event.acceleration.x;
double xNorm = (xOrig + xOffset)*(9.81/xRange);
Serial.print(xNorm);
Serial.print(" ");
double yOrig = event.acceleration.y;
double yNorm = (yOrig + yOffset)*(9.81/yRange);
Serial.print(yNorm);
Serial.print(" ");
double zOrig = event.acceleration.z;
double zNorm = (zOrig + zOffset)*(9.81/zRange);
Serial.print(zNorm);
Serial.print(" ");
}
void loop() {
readChip(2);
readChip(3);
readChip(4);
readChip(5);
Serial.println();
delayMicroseconds(50);
}