Servo Motor not working

I have a servo motor and i think it's not working. How can i understand if it is working or not? My servo motor is: SM-S2309S.

I have connected it with an arduino uno and a joystick so i can control the servo motor with the joystick. Here is the code

#include <Servo.h>

// Define the pins for the joystick and servo
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
#define SERVO_PIN 9

// Define the range of values for the joystick
#define JOYSTICK_MIN 0
#define JOYSTICK_MAX 1023

// Define the range of angles for the servo motor
#define ANGLE_MIN 0
#define ANGLE_MAX 180

// Define the angle increment
#define ANGLE_INCREMENT 5 // Adjust this value as needed

Servo servoMotor;
int currentAngle = 90; // Start from the center position
int lastJoystickX = JOYSTICK_MIN; // Initialize the last joystick position

void setup() {
  // Initialize serial communication for debugging
  Serial.begin(9600);

  // Attach the servo to its pin
  servoMotor.attach(SERVO_PIN);
}

void loop() {
  // Read the values from the joystick
  int joystickX = analogRead(JOYSTICK_X);

  // Only update the servo position if the joystick position has changed
  if (joystickX != lastJoystickX) {
    // Map the joystick values to the range of servo angles
    int angleChange = map(joystickX, JOYSTICK_MIN, JOYSTICK_MAX, -ANGLE_INCREMENT, ANGLE_INCREMENT);

    // Calculate the new angle
    int newAngle = currentAngle + angleChange;

    // Ensure the new angle is within the allowed range
    if (newAngle < ANGLE_MIN) {
      newAngle = ANGLE_MIN;
    } else if (newAngle > ANGLE_MAX) {
      newAngle = ANGLE_MAX;
    }

    // Update the servo position
    servoMotor.write(newAngle);

    // Update the current angle and last joystick position
    currentAngle = newAngle;
    lastJoystickX = joystickX;

    // Print the joystick value and mapped angle for debugging
    Serial.print("Joystick X: ");
    Serial.print(joystickX);
    Serial.print(", Angle Change: ");
    Serial.print(angleChange);
    Serial.print(", New Angle: ");
    Serial.println(newAngle);
  }

  // Add a short delay to avoid reading the joystick too frequently
  delay(50);
}

UPDATE : The servo is working :smile: but it has a delay with the joystick that is over the delay that i have in the code? Does it mean that the servo has a problem?

Very good!

Can you describe this delay? During joystick movement? After joystick movement?

After the joystick movement

Your code waits for changes in the "x" created by the joystick. What are you trying to make happen?

I'm trying to simply control the servo motor with the joystick

Your sketch does exactly this.