#include <Servo.h>

const int irSensorPin = 2;    // IR sensor OUT pin
const int servoPin = 3;       // Servo signal pin

Servo sliderServo;

bool isMoving = false;
unsigned long lastActivated = 0;

void setup() {
  pinMode(irSensorPin, INPUT);
  sliderServo.attach(servoPin);
  sliderServo.write(0); // Initial position
}

void loop() {
  int irValue = digitalRead(irSensorPin);

  // IR sensor LOW means obstacle detected (typical IR modules)
  if (irValue == LOW && !isMoving) {
    isMoving = true;
    moveServoSmooth(0, 180, 2000);  // Move to 90° in 2 seconds
    delay(2000);                   // Wait at 90°
    moveServoSmooth(180, 0, 2000);  // Return to 0° in 2 seconds
    isMoving = false;
  }
}

// Smooth servo movement function
void moveServoSmooth(int fromAngle, int toAngle, int duration) {
  int steps = abs(toAngle - fromAngle);
  int stepDelay = duration / steps;

  if (fromAngle < toAngle) {
    for (int i = fromAngle; i <= toAngle; i++) {
      sliderServo.write(i);
      delay(stepDelay);
    }
  } else {
    for (int i = fromAngle; i >= toAngle; i--) {
      sliderServo.write(i);
      delay(stepDelay);
    }
  }
}
