Arduino - Girasol seguidor de luz

Quiero conseguir mediante un servomotor continuo que pueda seguir la luz allá donde incide luz, pero lo unico que consigo es que gire en el sentido en el qual recibe mas luz. Lo que quiero conseguir es que el servomotor deje de girar una vez apunto con una linterna y se quede quito hasta que señale a otro ldr y tendra que moverse hacia ese lado y quedarse quieto en la nueva posicion. Os dejo el codigo que tengo, por favor necesito una ayuda:

#include <Servo.h>

Servo myservo;
unsigned long time;
unsigned long timetest;
//int val = 0;
//int down = 255;
//int up = 0;

int pos = 90;

int entradaI = 0;
int entradaC = 1;
int entradaD = 2;

int baseI = 0;
int baseC = 0;
int baseD = 0;

int salidaI = 0;
int salidaC = 0;
int salidaD = 0;

int difI = 0;
int difD = 0;

void setup()
{
Serial.begin(9600);
pinMode(entradaI, INPUT);
pinMode(entradaC, INPUT);
pinMode(entradaD, INPUT);

baseI = analogRead(entradaI);
baseC = analogRead(entradaC);
baseD = analogRead(entradaD);

myservo.attach(9);
myservo.write(pos);

//time = millis();
}

void loop()
{

salidaI = analogRead(entradaI) - baseI+511;
Serial.println(salidaI);
salidaC = analogRead(entradaC) - baseC+511;
Serial.println(salidaC);
salidaD = analogRead(entradaD) - baseD+511;
Serial.println(salidaD);

difI = salidaC - salidaI;
difD = salidaC - salidaD;

if (salidaI < salidaC && difI > difD)
{
moveI();
}
if (salidaD < salidaC && difD > difI)
{
moveD();
}
Serial.println(".....");
delay(25);
timetest = millis() - time;
//if (timetest > 20000)
//{
// reset();
//}
}

void moveI()
{
difI = salidaC - salidaI;
if (difI > 4)
{
pos = pos + 1 ;
myservo.write(pos);
difI= salidaC - salidaI;
if(difI < 4)
{
reset();
}
if(pos == 0)
{
for(pos = 0; pos < 90; pos++)
{
myservo.write(pos);
delay(25);
}
}
Serial.println("Mueve Derecha");
Serial.println("nueva posicion: " + (pos));
delay(55);
}
return;
}

void moveD()
{
difD = salidaC - salidaD;
if (difD > 4)
{
pos = pos - 1 ;
myservo.write(pos);
difD = salidaC - salidaD;
if(difD < 4)
{
reset();
}
if(pos == 0)
{
for(pos = 180; pos > 90; pos--)
{
myservo.write(pos);
delay(25);
}
}
Serial.println("Mueve Izquierda");
Serial.println("Nueva posicion: ");
Serial.println(pos);
delay(50);
}
return;
}

void reset()
{
baseI = analogRead(entradaI);
baseC = analogRead(entradaC);
baseD = analogRead(entradaD);
time = millis();
}

Hola Paulet,
tu tienes definidas 2 condiciones, si uno es mayor otro, haz esto, en tu caso gira a la derecha o a la izquierda, yo definiría ( con otro if) cuando quieres que este quieto y creas un void(parado) o con el nombre que más te guste, el servo se tendrá que quedar en la última posición, así estará parado.
Espero que te haya servido.

Nayma

void moveI()
{
  difI = salidaC - salidaI;
  if (difI > 4)
  {
    pos = pos + 1 ;                            
    myservo.write(pos); 
    difI= salidaC - salidaI;
    if(difI < 4)
    {
      reset();
    }
    if(pos == 0)
    {
      for(pos = 0; pos < 90; pos++)  
      {                                  
        myservo.write(pos);              
        delay(25);                       
      } 
    }      
    Serial.println("Mueve Derecha");
    Serial.println("nueva posicion: " + (pos));
    delay(55);
  }                      
  return;
}

La condicion
if(difI < 4)
{
reset();
}
nunca se ejecuta porque esta dentro del if(difI > 4) que es la condicion opuesta.
Unreachable code...
por tanto nunca ejectuta el metodo reset();

Debes ponerlo como:

if(difI >= 4)
{
Cosas que quieres hacer aqui si la condicion es verdadera;
}
else
{
reset();
}