#include <Servo.h>
Servo horizontal; // Horizontal servo
Servo vertical; // Vertical servo
// Initial servo positions
int servoh = 90; // Horizontal starting position
int servov = 90; // Vertical starting position
// Servo limits
int servohLimitHigh = 180;
int servohLimitLow = 0;
int servovLimitHigh = 180;
int servovLimitLow = 0;
void setup() {
Serial.begin(9600); // Initialize serial communication
horizontal.attach(9);
vertical.attach(10);
horizontal.write(servoh);
vertical.write(servov);
delay(3000); // Allow servos to reach initial position
}
void loop() {
int tol = 50;
// Read LDR values
int it = analogRead(A0); // Top left
int rt = analogRead(A1); // Top right
int id = analogRead(A2); // Down left
int rd = analogRead(A3); // Down right
// Print LDR values for debugging
Serial.print("Top Left: "); Serial.print(it);
Serial.print(" | Top Right: "); Serial.print(rt);
Serial.print(" | Down Left: "); Serial.print(id);
Serial.print(" | Down Right: "); Serial.println(rd);
// Calculate averages
int avt = (it + rt) / 2; // Average value top
int avd = (id + rd) / 2; // Average value down
int avi = (it + id) / 2; // Average value left
int avr = (rt + rd) / 2; // Average value right
// Check differences
int dvert = avt - avd; // Difference up and down
int dhoriz = avi - avr; // Difference left and right
// Print differences for debugging
Serial.print("Vertical Diff: "); Serial.print(dvert);
Serial.print(" | Horizontal Diff: "); Serial.println(dhoriz);
// Vertical servo control
if (dvert > tol) {
servov = servov - 1; // Move down
if (servov < servovLimitLow) {
servov = servovLimitLow; // Enforce lower limit
}
} else if (dvert < -tol) {
servov = servov + 1; // Move up
if (servov > servovLimitHigh) {
servov = servovLimitHigh; // Enforce upper limit
}
}
vertical.write(servov);
delay(20);
// Horizontal servo control
if (dhoriz > tol) {
servoh = servoh - 1; // Move left
if (servoh < servohLimitLow) {
servoh = servohLimitLow; // Enforce lower limit
}
} else if (dhoriz < -tol) {
servoh = servoh + 1; // Move right
if (servoh > servohLimitHigh) {
servoh = servohLimitHigh; // Enforce upper limit
}
}
horizontal.write(servoh);
delay(20);
delay(100); // Loop delay
}