Acelerómetro adxl335 valor a grados

Hola amigos del foro, os comento estoy liado con un pequeño proyecto.Es un robot esquiva objetos ,estoy con la parte cuando encuentra un objeto y tiene que girar para decidir donde ir .De primeras lo quería hacer sin modulo extra controlando el giro por tiempo, activado los motores así el robot girará de 0 a 90 grados y de ay a -90 que sera el lado opuesto.Pero no da buenos resultados ya que cuando queda poca batería el giro no es completo.Tengo un adlx y quiero usarlo como medidor de angulo. e encontrado un codigo en internet y lo e probado pero los valores no creo q sean los correctos.Os lo dejo

#define xPin A2
#define yPin A1
#define zPin A0
#define st 2

int minVal = 0;
int maxVal = 1028;

double x,y,z;

void setup() {
	pinMode(st,OUTPUT);
	digitalWrite(st,LOW);
	Serial.begin(9600);
  
}

void loop() {

	int xRoad = analogRead(xPin);
	int yRoad = analogRead(yPin);
	int zRoad = analogRead(zPin);

	int xAng = map(xRoad,minVal,maxVal,-100,100);
	int yAng = map(yRoad,minVal,maxVal,-100,100);
	int zAng = map(zRoad,minVal,maxVal,-100,100);

	y = RAD_TO_DEG*(atan2(-yAng,-zAng)+PI);
	x = RAD_TO_DEG*(atan2(-xAng,-zAng)+PI);
	z = RAD_TO_DEG*(atan2(-yAng,-xAng)+PI);

	Serial.print("x: ");
	Serial.print(x);
	Serial.print(" y: ");
	Serial.print(y);
	Serial.print(" z: ");
	Serial.println(z);             
}

Me gustaria que me ayudarais a crear un programa para obtener el ángulo y que el robot funcionara asta llegar a su sitio.
Gracias y un saludo.

Cuando queda poca batería se altera todo, incluido la medición AD porque Vref cambia y lo que crees que es 5V ya no lo es.
Este código que posteas es similar a este que encontré Sensing Orientation With The ADXL335 + Arduino
Verifica si es asi y agrega un divisor resistivo para leer el estado de la batería tambien.

hola compañero , esto son los resultado del programa y el acelerómetro,el eje x ,y dan valores correcto cuando modifico la inclinación pero el eje z varía con valores no exactos al giro ,eso valor que te pongo es girando el acelerómetro a la derecha hasta la posición de 90 grados.

x: 1.52 | y: 9.54 | z: 8.97

x: 2.01 | y: 9.46 | z: 11.89

x: 2.47 | y: 8.34 | z: 16.39

x: 3.42 | y: 7.31 | z: 25.02

x: 2.45 | y: 8.27 | z: 16.39

x: 2.45 | y: 10.18 | z: 13.39

x: 1.46 | y: 9.62 | z: 8.53

x: 5.71 | y: 12.23 | z: 24.78

x: 8.92 | y: 9.85 | z: 42.14 // aquí sigo avanzando en la dirección

x: 6.90 | y: 7.81 | z: 41.42

x: 8.06 | y: 13.59 | z: 30.38 // sigo avanzando y el valor cambia y empieza a dar valores menores al giro

x: 8.00 | y: 12.13 | z: 33.18

segunda prueba:

x: 0.48 | y: 11.31 | z: 2.39

x: 5.07 | y: 10.95 | z: 24.62

x: 6.13 | y: 11.67 | z: 27.47

x: 6.34 | y: 11.59 | z: 28.44

x: 7.31 | y: 12.53 | z: 29.98

x: 6.01 | y: 9.46 | z: 32.28

x: 7.24 | y: 7.24 | z: 45.00

x: 7.53 | y: 7.07 | z: 46.85

x: 7.53 | y: 8.00 | z: 43.26

x: 7.13 | y: 9.46 | z: 36.87

x: 8.06 | y: 5.71 | z: 54.78 // este valor es con el giro a 180 grados en el accelerometro

x: 4.59 | y: 8.13 | z: 29.36

x: 12.99 | y: 352.49 | z: 119.74

Prueba esto de Adafruit AutoCalibración
o este Calibración II

Gracias compañero a ello voy a ver que tal ,y gracias por la idea del divisor un saludo