Necesito ayuda urgente

Hola todos,
Mis compañeros y yo hemos empezado un proyecto hace seis meses y ya estamos en la recta final. Solo nos queda la parte de programación, y es la primera vez que lo hacemos, por lo que nos está dando bastantes problemas, y nos gustaría si alguno de ustedes es tan amable de ayudarnos a solucionar nuestro gran problema, porque el martes que viene ya tenemos que presentarlo y nos causaría una gran mal sabor de boca no poder acabarlo.

Os explico, nuestro proyecto es básicamente una cinta transportadora que lleva a bolas de color negro y blanco hasta un servo que se encarga de separarlas en función de su color. Para que detecte los colores hemos utilizado dos LDR y hemos seguido el siguiente código:

#include <Servo.h>
Servo myservo;
int ldr1 = 5;
int ldr2 = 6;
int val;
int state1;
int state2;

void setup () {
myservo.attach(9);
pinMode(ldr1, INPUT);
pinMode(ldr2, INPUT);
}
void loop() {
state1 = digitalRead(ldr1);
state2 = digitalRead(ldr2);

if(state1 == HIGH && state2 == HIGH) {
val = 1500;
}

else if(state1 != HIGH && state2 == HIGH) {
val = 2000;
}

else if(!state2) {
val = 1000;
}
myservo.writeMicroseconds(val);
delay(500);

}

Cuando cargamos el programa el servo funciona correctamente siguiendo el código, pero solo durante unos cuantos segundos, porque después estando los dos LDR en HIGH, en vez de la posición que le corresponde(1500 (neutro)) toma el valor (1000) y está así durante otro tiempo, y después vuelve a su posición inicial(1500(neutro)). Si es de ayuda, cuando el servo toma el valor 1000, solo se cumple: “else if(state1 != HIGH && state2 == HIGH) {
val = 2000;”

Gracias por vuestra ayuda.

Foto del montaje Cambia el titulo del post Porque usas los ldr como digitales? Esquema de circuito

Yo en principio veo el código correcto, aunque entre las condiciones, veo que no se observa una de las combinaciones posibles (LOW-LOW), que daría el resultado de la última condición (entiendo que esa opción la descartáis por imposible). Lo primero que haría es monitorear por serial los valores que se van produciendo, por si hay alguna sorpresa hardware. Y tal vez simplificaría un poco las condiciones:

valservo=1500; if(digitalRead(ldr1)) valservo-=500; if(digitalRead(ldr2)) valservo+=500;