// ##############################################################
// Servo Motor Interface #
// ##############################################################
//
// Servo Motor (SG90) interface with Arduino Uno (Hardware & Simulation)
//
// Check out the link for Code explanation and Hardware details
// Link:
// http://tech.arunkumarn.in/blogs/arduino-uno/interfacing-servo-motor-with-arduino-uno-complete-guide-with-code/
//
//
#include <Servo.h>
// --- Configuration ---
#define SERVO_PIN 9 // PWM pin connected to servo signal wire
#define MIN_ANGLE 0 // Minimum servo angle (degrees)
#define MAX_ANGLE 180 // Maximum servo angle (degrees)
#define STEP_DELAY 500 // Delay between angle changes (milliseconds)
#define STEP_ANGLE 10 // Step Angle change (degrees)
// Create servo object
Servo myServo;
// ============================================
// Setup Function - Runs once at startup
// ============================================
void setup() {
// Initialize serial communication for debugging
Serial.begin(9600);
Serial.println("=== Servo Motor Control Started ===");
// Attach servo to the defined PWM pin
myServo.attach(SERVO_PIN);
Serial.println("Servo attached to pin " + String(SERVO_PIN));
// Move servo to initial neutral position (90°)
myServo.write(90);
Serial.println("Servo moved to neutral position (90°)");
delay(1000); // Allow servo time to reach position
}
// ============================================
// Main Loop Function - Runs repeatedly
// ============================================
void loop() {
// === Sweep Forward: MIN_ANGLE → MAX_ANGLE ===
Serial.println("\n--- Sweeping Forward ---");
for (int angle = MIN_ANGLE; angle <= MAX_ANGLE; angle = angle + STEP_ANGLE) {
myServo.write(angle); // Set servo angle
Serial.print("Angle: ");
Serial.print(angle);
Serial.println("°");
delay(STEP_DELAY); // Wait for servo to reach position
}
// === Sweep Backward: MAX_ANGLE → MIN_ANGLE ===
Serial.println("\n--- Sweeping Backward ---");
for (int angle = MAX_ANGLE; angle >= MIN_ANGLE; angle = angle - STEP_ANGLE) {
myServo.write(angle); // Set servo angle
Serial.print("Angle: ");
Serial.print(angle);
Serial.println("°");
delay(STEP_DELAY); // Wait for servo to reach position
}
}