Lampara que cambia de color

Hola a todos, tengo entre manos un proyecto que consiste en una especie de lampara con un par de leds RGB y que al girarla cierto angulo, esta cambie el color de los LEDs. Para tal proposito me he comprado unos cuantos LEDs RGB, los cuales ya he aprendido a hacerlos funcionar, y un IMU (Unidad de Medicion Inercial). El IMU consiste en un acelerometro (ADXL345), un giroscopio (ITG3205) y una brujula digital (HMC5883L). Salvo la brujula, tengo funcionando por separado el acelerometro y el giroscopio conectados por I2C al arduino, ahora he empezado a mirar el tema de medir angulos pero ando un poco perdido con el tema. He leido sobre filtros Kalman que calculan el angulo en funcion de las mediciones del acelerometro y el giroscopio, tambien he leido que con tan solo un acelerometro se podria hacer mediante trigonometria. Me gustaria saber si alguien me podria orientar mas sobre esto, porque ando un poco perdido...

PD: Si alguien lo necesita puedo subir el sketch del acelerometro y del giroscopio.

Hola a todos de nuevo, he vuelto a desempolvar el proyecto y pese a no tener mucha atencion mi post, voy a compartir el codigo que he desarrollado. Al final y tras mucho comerme la cabeza, cai en usar un potenciometro para medir cuanto giro la lampara y que en funcion del voltaje que le llega, calcular el color que deberia mostrarse. Ahora estoy desarrollando un poco mas el codigo para que al pulsar un boton, los colores, cambien automaticamente. El montaje que he hecho lo subire en cuanto tenga el codigo final. Aqui el codigo:

int R = 11;
int G = 10;
int B = 9;
int pinPot = A0;
int aumentarBrillo = 1;
double voltaje;
int Ro, Go, Bo;
int color;

void setup() {
Serial.begin(9600);
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}

void loop() {
voltage = analogRead(pinPot) * (5.0 / 1023.0)*1000;
color=map(voltaje, 1210, 3780, 0, 1279);
if(0<=color && color<256){
//Color entre rojo y amarillo
Ro=255;
Go=color;
Bo=0;
}
else if(256<=color && color<512){
//Color entre amarillo y verde
Ro=255-color;
Go=255;
Bo=0;
}
else if(512<=color && color<768){
//Color entre verde y cian
Ro=0;
Go=255;
Bo=color-511;
}
else if(768<=color && color<1024){
//Color entre cian y azul
Ro=0;
Go=768-color;
Bo=255;
}
else if(1024<=color && color<1280){
//Color entre azul y morado
Ro=color-1023;
Go=0;
Bo=255;
}
analogWrite(R, 255-Ro);
analogWrite(G, 255-Go);
analogWrite(B, 255-Bo);

}

Salu2!