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);
}