Accelerometer and Arduino

Hi guys,
I’m using this accelerometer sensor ADXL377Z.
But I have some problems to calibrate it. I use this, but it works for a accelerometer with ±1g. How can I calibrate mine accelerometer?

#define DELTA 3
#define N_CAMPIONE 20
#define x_PIN A0  // Cavo Arancio
#define y_PIN A1  // Cavo Verde
#define z_PIN A2  // Cavo Giallo
#define Calibrate_PIN 3

// Inizialmente si pone il minimo 1023 e il massimo 0 - Successivamente
// dopo diverse prove ottimiziamo il range e troviamo come valori
// accettabili quelli compresi in un range da 270 a 410.
// HO IMPOSTATO GIA' IL QUESTO RANGE PER SEMPLIFICARE LE MIE SPIEGAZIONI
#define MINSENSORX 0
#define MAXSENSORX 518
#define MINSENSORY 0
#define MAXSENSORY 518
#define MINSENSORZ 0
#define MAXSENSORZ 518
// Variabili globali utilizzate per individuare i valori
// minini e massimi letti sugli ingressi A0 (x) A1 (y) e A2 (z) 
int xMin = MINSENSORX;
int xMax = MAXSENSORX;
int yMin = MINSENSORY;
int yMax = MAXSENSORY;
int zMin = MINSENSORZ;
int zMax = MAXSENSORZ;

int p_xMin = -200;
int p_xMax = -200;
int p_yMin = -200;
int p_yMax = -200;
int p_zMin = -200;
int p_zMax = -200; 
int p_x = -200;
int p_y = -200;
int p_z = -200;

void setup() 
{
  // Si osservi che in questo progetto la linea successiva
  // e' stata disabilitata (e in questo caso il range e' 270-410)
  //analogReference(EXTERNAL);
  Serial.begin(9600);
  pinMode(Calibrate_PIN, INPUT_PULLUP);
}
 
void loop() 
{
  int buttonState = digitalRead(Calibrate_PIN);
  boolean Cambiato=false;
  int x = LeggiSensoreAsse(x_PIN);
  int y = LeggiSensoreAsse(y_PIN);
  int z = LeggiSensoreAsse(z_PIN);
  if (buttonState==LOW)
  {
      CalibraAccellerometro(x,y,z);
      Cambiato=true;
  }
  Cambiato=Cambiato || (p_xMin!=xMin);
  Cambiato=Cambiato || (p_yMin!=yMin);
  Cambiato=Cambiato || (p_zMin!=zMin);
  Cambiato=Cambiato || (p_xMax!=xMax);
  Cambiato=Cambiato || (p_yMax!=yMax);
  Cambiato=Cambiato || (p_zMax!=zMax);
  Cambiato=Cambiato || (abs(p_x-x)>DELTA);
  Cambiato=Cambiato || (abs(p_y-y)>DELTA);
  Cambiato=Cambiato || (abs(p_z-z)>DELTA);
  if (Cambiato)
  { 
    Serial.print("Range Valori (min,max): X = ["+String(xMin)+","+String(xMax)+"]");
    Serial.print(" Y = ["+String(yMin)+","+String(yMax)+"]");
    Serial.println(" - Z = ["+String(zMin)+","+String(zMax)+"]");

    Serial.print("Lettura attuale (x,y,z) = ("+String(x)+","+String(y)+","+String(z)+") :: ");
    // Converto le letture in millesimi di g (gravità)
    long xScaled = map(x, xMin, xMax, -1000, 1000);
    long yScaled = map(y, yMin, yMax, -1000, 1000);
    long zScaled = map(z, zMin, zMax, -1000, 1000);
  
    // riscalo ad una frazione di g
    float xAccel = round((xScaled-xScaled%10) / 1000.0);
    float yAccel = round((yScaled-yScaled%10) / 1000.0);
    float zAccel = round((zScaled-zScaled%10) / 1000.0);
    Serial.print(xAccel);
    Serial.print("G, ");
    Serial.print(yAccel);
    Serial.print("G, ");
    Serial.print(zAccel);
    Serial.println("G");
  }
  p_x = x;
  p_y = y;
  p_z = z; 
  p_xMin = xMin;
  p_xMax = xMax;
  p_yMin = yMin;
  p_yMax = yMax;
  p_zMin = zMin;
  p_zMax = zMax; 
  delay(500);
}
 
// Effettuo più letture per ridurre il rumore
// e restituisco la media
int LeggiSensoreAsse(int assePin)
{
  long Lettura = 0;
  analogRead(assePin); //Lettura a vuoto
  delay(1);
  for (int i = 0; i < N_CAMPIONE; i++)
  {
    Lettura += analogRead(assePin);
    delay(1);
  }
  return Lettura/N_CAMPIONE;
}
 
// Determina il range dei valori x,y e z quando
// il push button è premuto
void CalibraAccellerometro(int x, int y, int z)
{
  Serial.println("Hai premuto il bottone - Calibro...");
  if (x < xMin) xMin = x;
  if (x > xMax) xMax = x;
  if (y < yMin) yMin = y;
  if (y > yMax) yMax = y;
  if (z < zMin) zMin = z;
  if (z > zMax) zMax = z;
}

Thanks

I use this, but it works for a accelerometer with +-1g.

I don't see anything in the code that supports that claim.

Calibration would seem easy. Take a reading and turn it upside down. The difference should be 2g.

Ok now it works :D I have to check this valure in labview, but I want only to read the value with labview, I don't want to programm also Arduino.

So I put my sketch in the the labview sketch, but how can I read the data? If I programm Arduino with Labview, I can't to calibrate the sensor.

Thanks