Плавный ход без delay()

Сервопривод идёт к цели по одному градусу за такт — плата при этом не «заморожена».

Продвинутый уровень Arduino Uno C++
Схема подключения: Плавный ход без delay()
Схема в симуляторе. Нажмите «Открыть в симуляторе», чтобы запустить её и поменять.

Что понадобится

Как подключить

ОткудаКуда
Arduino Uno5V→СервоприводV+
Arduino UnoGND→СервоприводGND
Arduino UnoD9→СервоприводPWM

Скетч

#include <Servo.h>

// Вал едет к цели со скоростью «градус за 15 мс», а loop() остаётся свободным:
// можно одновременно опрашивать кнопки и датчики.
Servo myservo;

int angle = 0;
int target = 180;
unsigned long lastStep = 0;

void setup() {
  myservo.attach(9);
  myservo.write(angle);
  Serial.begin(9600);
}

void loop() {
  if (millis() - lastStep >= 15) {
    lastStep = millis();
    if (angle < target) angle++;
    else if (angle > target) angle--;
    else {
      target = (target == 180) ? 0 : 180;       // дошли — едем обратно
      Serial.print("новая цель ");
      Serial.println(target);
    }
    myservo.write(angle);
  }
}

Коротко о детали: Сервопривод

Сервопривод поворачивает вал в заданное положение от 0 до 180° и удерживает его. Угол задаётся шириной импульса, в скетче — Servo.write(угол). Под нагрузкой ему нужно отдельное питание: от выводов платы серьёзная серва работать не будет.

Распиновка и все примеры →

Ещё примеры с деталью «Сервопривод»

Попробуйте сами

Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.

Открыть «Плавный ход без delay()» в симуляторе