// LDR analog inputs
#define LDR_TL A0
#define LDR_TR A1
#define LDR_BL A2
#define LDR_BR A3
// Motor X (horizontal)
#define DIR_X 2
#define STEP_X 3
// Motor Y (vertical)
#define DIR_Y 4
#define STEP_Y 5
// Motor movement config
int stepDelay = 700; // Delay between steps (microseconds)
int threshold = 100; // Light difference threshold
void setup() {
pinMode(DIR_X, OUTPUT);
pinMode(STEP_X, OUTPUT);
pinMode(DIR_Y, OUTPUT);
pinMode(STEP_Y, OUTPUT);
Serial.begin(9600); // Optional: for debugging
}
void loop() {
int tl = analogRead(LDR_TL);
int tr = analogRead(LDR_TR);
int bl = analogRead(LDR_BL);
int br = analogRead(LDR_BR);
int avgTop = (tl + tr) / 2;
int avgBottom = (bl + br) / 2;
int avgLeft = (tl + bl) / 2;
int avgRight = (tr + br) / 2;
// Horizontal (X-axis) movement
int diffX = avgLeft - avgRight;
if (abs(diffX) > threshold) {
digitalWrite(DIR_X, diffX > 0 ? HIGH : LOW); // Turn motor
stepMotor(STEP_X);
}
// Vertical (Y-axis) movement
int diffY = avgTop - avgBottom;
if (abs(diffY) > threshold) {
digitalWrite(DIR_Y, diffY > 0 ? HIGH : LOW); // Tilt motor
stepMotor(STEP_Y);
}
delay(200); // Wait a bit before next read
}
void stepMotor(int stepPin) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay);
}