так пытайся вникать в написаное. нету у таких серв "плавно перемещайся туда-то", вот нет и всё. получает она управляющие импульсы и если условно и не вникать в тараканы электроники сервы, вращает она почти с одинаковой скоростью. плавно сам делай. твоя задача сводится к примитивнейшим математическим вычислениям и про то, что есть сервы, ардуины, программирование, можно особо не думать. абстрагируйся. у тебя есть числа - начальное, текущее и конечное положения. ещё есть текущее значение времени или время, прошедшее с какого-то момента, допустим с начала вращения сервы. ещё есть значение времени, за которое текущее положение должно изменяться от начального до конечного. вот смотришь сколько времени прошло и вычисляешь, чему должно равняться это текущее значение. хочешь, делай как в примере с millis. хочешь делай через цикл for. давай второй вариант разжую.
начальное положение 20, конечное 80. должно провернуться за одну секунду. допустим текущее значение должно меняться за 10 итераций. значит делишь 60 градусов и 1000 миллисекунд на 10. тогда будет примерно так
- Код: Выделить всё • Развернуть
for(i=1; i<=10; i++)
{
servo.write (20 + i * 6);
delay(100);
}
за 20 итераций
- Код: Выделить всё • Развернуть
for(i=1; i<=20; i++)
{
servo.write (20 + i * 3);
delay(50);
}
за 60 итераций
- Код: Выделить всё • Развернуть
for(i=1; i<=60; i++)
{
servo.write (20 + i);
delay(17);
}
вот для своего кода примерно так и делаешь для каждой сервы. у тебя в последнем коде задаётся 4 положения, вот для нужных серв все 4 раза и делай такие циклы. примитивно, много кода, но для развития понимания нормально.
с millis всё тоже самое, просто смотришь сколько времени прошло и вычисляешь, в каком положении должна быть серва. с for ты просто сразу посчитал нужную задержку и на сколько положение должно было измениться на каждой итерации.