Плавный ход без delay()
Сервопривод идёт к цели по одному градусу за такт — плата при этом не «заморожена».

Что понадобится
Как подключить
| Откуда | Куда | |||
|---|---|---|---|---|
| Arduino Uno | 5V | → | Сервопривод | V+ |
| Arduino Uno | GND | → | Сервопривод | GND |
| Arduino Uno | D9 | → | Сервопривод | 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()» в симуляторе