#include <Servo.h> // libreria para los servo motores
// 180 horizontal MAXIMO
Servo horizontal; // declaramos el valor para el servo horizontal
int servoh = 180;
int servohLimitHigh = 180; //limite en posicion superior
int servohLimitLow = 65; //limite para posicion inferior
Servo vertical; // vertical servo
int servov = 45;
int servovLimitHigh = 80;
int servovLimitLow = 15;
int ldrlt = 0; // conexion a las resistencias LDR
int ldrrt = 1;
int ldrld = 2;
int ldrrd = 3;
void setup()
{
Serial.begin(9600);
horizontal.attach(9); //servo horizontal pin digital 9
vertical.attach(10); // servo vertical pin digital 10
horizontal.write(180);
vertical.write(45);
delay(3000);
}
void loop()
{
int lt = analogRead(ldrlt); // top left (superior izquierdo)
int rt = analogRead(ldrrt); // top right (superior derecho)
int ld = analogRead(ldrld); // down left (inferior izquierdo)
int rd = analogRead(ldrrd); // down rigt (inferior derecho)
// Puedes imprimir los valores de los LDR para ajustar los umbrales
Serial.print("LT: ");
Serial.print(lt);
Serial.print(" | RT: ");
Serial.print(rt);
Serial.print(" | LD: ");
Serial.print(ld);
Serial.print(" | RD: ");
Serial.println(rd);
// int dtime = analogRead(4)/20; // Opcional si utilizamos potenciometros para la velocidad
// int tol = analogRead(5)/4;
int dtime = 10;
int tol = 50;
int avt = (lt + rt) / 2; // valor superior maximo
int avd = (ld + rd) / 2; // valor inferior maximo
int avl = (lt + ld) / 2; // valor izquierdo maximo
int avr = (rt + rd) / 2; // valor derecho maximo
int dvert = avt - avd; // diferencia entre superior e inferior
int dhoriz = avl - avr;// diferencia entre izquierdo y derecho
Serial.print(avt); // Imnprimir valores de posicion en monitor serial
Serial.print(" ");
Serial.print(avd);
Serial.print(" ");
Serial.print(avl);
Serial.print(" ");
Serial.print(avr);
Serial.print(" ");
Serial.print(dtime);
Serial.print(" ");
Serial.print(tol);
Serial.println(" ");
if (-1*tol > dvert || dvert > tol) // revisar la diferencia para cambiar al angulo vertical
{
if (avt > avd)
{
servov = ++servov;
if (servov > servovLimitHigh)
{
servov = servovLimitHigh;
}
}
else if (avt < avd)
{
servov= --servov;
if (servov < servovLimitLow)
{
servov = servovLimitLow;
}
}
vertical.write(servov);
}
if (-1*tol > dhoriz || dhoriz > tol) // revisar la diferencia para cambiar al angulo horizontal
{
if (avl > avr)
{
servoh = --servoh;
if (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
}
else if (avl < avr)
{
servoh = ++servoh;
if (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
else if (avl = avr)
{
}
horizontal.write(servoh);
}
delay(dtime);
}