#include <Servo.h>

// Pin definitions
#define LED_CLOCKWISE 13      // LED for clockwise movement
#define LED_COUNTERCLOCKWISE 12 // LED for counterclockwise movement
#define POTENTIOMETER_PIN A0  // Analog pin for potentiometer
#define SERVO_PIN 9          // Digital pin for servo control

// Constants
#define STATE_DURATION 2000   // Minimum duration for a state in milliseconds

// Global variables
Servo servo1;
int lastAngle = 0;                 // To keep track of the previous servo angle
unsigned long lastStateChangeTime = 0; // To track when the state last changed
int currentState = 0;              // 0: stationary, 1: clockwise, -1: counterclockwise

void setup() {
  // Initialize servo
  servo1.attach(SERVO_PIN);
  servo1.write(0);  // Set servo to 0 degrees
  
  // Initialize LEDs
  pinMode(LED_CLOCKWISE, OUTPUT);
  pinMode(LED_COUNTERCLOCKWISE, OUTPUT);
  digitalWrite(LED_CLOCKWISE, LOW);  // Turn off LED1
  digitalWrite(LED_COUNTERCLOCKWISE, LOW);  // Turn off LED2
  
  // Initialize serial for debugging
  Serial.begin(9600);
  
  lastStateChangeTime = millis();
}

void loop() {
  // Read potentiometer value and map to servo angle
  int potValue = analogRead(POTENTIOMETER_PIN);
  int currentAngle = map(potValue, 0, 1023, 0, 180);
  
  // Move the servo to the current angle
  servo1.write(currentAngle);
  
  // Determine the servo's movement state
  int newState = 0;
  if (currentAngle > lastAngle) {
    newState = 1; // Clockwise
  } else if (currentAngle < lastAngle) {
    newState = -1; // Counterclockwise
  } else {
    newState = 0; // Stationary
  }
  
  // Check if the state has changed and the minimum duration has passed
  if (newState != currentState && millis() - lastStateChangeTime >= STATE_DURATION) {
    currentState = newState;
    lastStateChangeTime = millis();
    
    // Update LEDs based on the new state
    if (currentState == 1) {
      // Clockwise movement
      digitalWrite(LED_CLOCKWISE, HIGH);
      digitalWrite(LED_COUNTERCLOCKWISE, LOW);
    } else if (currentState == -1) {
      // Counterclockwise movement
      digitalWrite(LED_CLOCKWISE, LOW);
      digitalWrite(LED_COUNTERCLOCKWISE, HIGH);
    } else {
      // Stationary
      digitalWrite(LED_CLOCKWISE, LOW);
      digitalWrite(LED_COUNTERCLOCKWISE, LOW);
    }
  }
  
  // Update the last angle
  lastAngle = currentAngle;
  
  // Add a small delay to reduce CPU usage
  delay(50);
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
led1:A
led1:C
led2:A
led2:C
pot1:VCC
pot1:SIG
pot1:GND
servo1:GND
servo1:V+
servo1:PWM