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