#include <Servo.h>
// Define pin assignments
const int servoPin = 7; // PWM digital pin for servo control
const int ledPin = 2; // PWM digital pin for LED brightness
const int pot1Pin = A0; // Potentiometer 1 -> Servo target position
const int pot2Pin = A1; // Potentiometer 2 -> LED brightness
const int pot3Pin = A2; // Potentiometer 3 -> Servo speed
Servo myServo;
int currentAngle = 0; // Track the current position of the servo
void setup() {
// Attach the servo to its PWM pin
myServo.attach(servoPin);
// Initialize servo to starting position
currentAngle = 90; // start at mid-position (optional, can be 0)
myServo.write(currentAngle);
// Set LED pin as output
pinMode(ledPin, OUTPUT);
}
void loop() {
// Read the potentiometers:
int pot1Value = analogRead(pot1Pin); // controls servo angle target (0-1023)
int pot2Value = analogRead(pot2Pin); // controls LED brightness (0-1023)
int pot3Value = analogRead(pot3Pin); // controls servo step delay (0-1023)
// Map pot1 value to servo angle (0 to 180 degrees)
int targetAngle = map(pot1Value, 0, 1023, 0, 180);
// Map pot2 value to LED brightness (0 to 255)
int brightness = map(pot2Value, 0, 1023, 0, 255);
// Map pot3 value to delay (10 to 100 milliseconds) controlling servo speed
int delayTime = map(pot3Value, 0, 1023, 10, 100);
// Update LED brightness
analogWrite(ledPin, brightness);
// Smooth servo movement: move one degree at a time toward the target
if(currentAngle < targetAngle){
currentAngle++;
myServo.write(currentAngle);
delay(delayTime);
}
else if(currentAngle > targetAngle){
currentAngle--;
myServo.write(currentAngle);
delay(delayTime);
}
// If at the target, small delay before next reading
else {
delay(10);
}
}