#include <Servo.h>
Servo myServo;
// Pins
const int joystickXPin = A0;
const int servoPin = 9;
const int ledPin = 13;
// Servo settings
int servoAngle = 90;
const int deadzone = 50;
const int moveSpeed = 2;
// LED blink timing
unsigned long previousMillis = 0;
bool ledState = LOW;
void setup() {
myServo.attach(servoPin);
myServo.write(servoAngle);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Read joystick
int joystickX = analogRead(joystickXPin);
// Move servo
if (joystickX > (512 + deadzone)) {
servoAngle += moveSpeed;
}
else if (joystickX < (512 - deadzone)) {
servoAngle -= moveSpeed;
}
// Keep angle within limits
servoAngle = constrain(servoAngle, 0, 180);
// Update servo position
myServo.write(servoAngle);
// Distance from center
int distanceFromCenter = abs(servoAngle - 90);
// LED blink logic
if (distanceFromCenter > 10) {
// Faster blinking closer to 0° or 180°
int blinkInterval = map(distanceFromCenter, 10, 90, 500, 50);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= blinkInterval) {
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(ledPin, ledState);
}
}
else {
digitalWrite(ledPin, LOW);
ledState = LOW;
}
// Debug output
Serial.print("Servo Angle: ");
Serial.print(servoAngle);
Serial.print(" | Blink Distance: ");
Serial.println(distanceFromCenter);
delay(20);
}
Comments