inclinometro con LSM303

Grazie Uwe, condivido il mio studio trigonometrico con la comunity...

per chi avesse la stessa mia esigenza... ecco delle formule ed uno sketch funzionante.

#include <Wire.h>
#include <LSM303.h>

LSM303 compass;


int xmin=-412;
int xmax=+622;
int ymin=-595;
int ymax=+365;
int zmin=-1114;
int zmax=-115;



void setup()
{
  Serial.begin(9600);
  Wire.begin();
  compass.init();
  compass.enableDefault();
  compass.m_min = (LSM303::vector<int16_t>){xmin, ymin, zmin}; //inserisci i valori min risultanti dalla calibrazione.
  compass.m_max = (LSM303::vector<int16_t>){xmax, ymax, zmax}; //inserisci i valori min risultanti dalla calibrazione.

  
}

void loop()
{
  compass.read();

  // converto il tutto in range da -90 a +90 gradi
  int xAng = map(compass.a.x, -412, +622, -90, 90);
  int yAng = map(compass.a.y, -595, +365, -90, 90);
  int zAng = map(compass.a.z, -1114, -115, -90, 90);

  // converto in gradi
  int beccheggio = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
  int rollio = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);

  if (beccheggio > 180) {
    beccheggio = beccheggio - 360;
  }
  if (rollio > 180) {
    rollio = rollio - 360;
  }

  Serial.println("Calcolo Angoli Beccheggio,\t Rollio");
  Serial.print(beccheggio );
  Serial.print("\t");
  Serial.println(rollio);

  delay(500);
}