June 23

mator xaralat 0-180 grads

Ushbu Arduino loyihasi sizga servo motorni ikkita tugma yordamida boshqarish imkonini beradi: qizil tugma uni 0° ga va ko'k tugma 180° ga siljitadi, LEDlar esa teskari aloqa sifatida yonadi.

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 <Servo.h>

// --- 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;
}