Arduino Project
Servo Control 2.0
Course Introduction
This Arduino project lets you control a servo motor with two buttons: the red button moves it toward 0° and the blue button toward 180°, with LEDs lighting up as feedback.
Note
If this is your first time working with an Arduino project, we recommend downloading and reviewing the basic materials first.
1.1 Install Arduino IDE(Important)
1.2 Introduction of Arduino IDE
Wiring

Common Connections:
Digital Servo Motor
Connect to breadboard’s positive power bus.
Connect to breadboard’s negative power bus.
Connect to 3 on the Arduino.
Button1
GND: Connect to a 1kΩ resistor, then to negative power bus on the breadboard
VCC: Connect to 7 on the Arduino.
Button2
GND: Connect to a 1kΩ resistor, then to negative power bus on the breadboard
VCC: Connect to 5 on the Arduino.
Blue LED
Connect the LED cathode to the to a 1kΩ resistor, then to negative power bus on the breadboard, anode to 6 on the Arduino.
Red LED
Connect the LED cathode to the to a 1kΩ resistor, then to negative power bus on the breadboard, anode to 4 on the Arduino.
Writing the Code
Note
You can copy this code into Arduino IDE.
Don’t forget to select the board(Arduino UNO R4 Minima/WIFI) and the correct port before clicking the Upload button.
#include
// --- Pin definitions ---
const int servoPin = 3; // Servo signal wire connected to pin 3
const int redLED = 4; // Red LED connected to pin 4 (with resistor)
const int redBtn = 5; // Red button connected to pin 5
const int blueLED = 6; // Blue LED connected to pin 6 (with resistor)
const int blueBtn = 7; // Blue button connected to pin 7
Servo myServo; // Create a Servo object
int currentAngle = 90; // Start servo at the middle position (90°)
const int stepSize = 5; // Servo moves 3° for each button press
// Variables to remember the last button states
bool lastRedState = HIGH; // HIGH means not pressed (because of INPUT_PULLUP)
bool lastBlueState = HIGH;
void setup() {
myServo.attach(servoPin); // Attach the servo to pin 3
myServo.write(currentAngle); // Move servo to initial position
pinMode(redLED, OUTPUT); // Set LED pins as outputs
pinMode(blueLED, OUTPUT);
pinMode(redBtn, INPUT_PULLUP); // Use internal pull-up resistor
pinMode(blueBtn, INPUT_PULLUP); // Button is active LOW
}
void loop() {
// Read current button states
bool redPressed = (digitalRead(redBtn) == LOW); // LOW means pressed
bool bluePressed = (digitalRead(blueBtn) == LOW);
// --- Red button logic ---
if (redPressed && lastRedState == HIGH) { // Detect new press (not held down)
delay(50); // Small delay to debounce
if (digitalRead(redBtn) == LOW) { // Check again to confirm press
digitalWrite(redLED, HIGH); // Turn on red LED
currentAngle = max(0, currentAngle - stepSize); // Move 3° toward 0°
myServo.write(currentAngle); // Update servo position
}
} else {
digitalWrite(redLED, LOW); // Turn off LED when not pressed
}
// --- Blue button logic ---
if (bluePressed && lastBlueState == HIGH) { // Detect new press
delay(50); // Debounce
if (digitalRead(blueBtn) == LOW) { // Confirm press
digitalWrite(blueLED, HIGH); // Turn on blue LED
currentAngle = min(180, currentAngle + stepSize); // Move 3° toward 180°
myServo.write(currentAngle); // Update servo position
}
} else {
digitalWrite(blueLED, LOW); // Turn off LED when not pressed
}
// Remember button states for next loop
lastRedState = redPressed;
lastBlueState = bluePressed;
}
