Регулювання швидкості переміщення, клас керування сервоприводом
Серія статей: Arduino, використання сервоприводів #5
Спробуємо додати можливість більш плавно змінювати положення сервоприводу, як і в прикладі для незалежного управління кількома сервоприводами.
Для цього додамо відповідні пермінні та функції, які їх задають.
Крім вже зробленої нами функції void MoveTo (int movepos) додамо функцію void MoveTo (int movepos, float movespeed). Вони мають однакові назви, але різну кількість аргументів. Такий варіант використовується замість зазначення значень відсутніх аргументів за умовчанням тоді, коли від кількості аргументів залежить функціонал. У цьому випадку під час виклику MoveTo(50) буде здійснюватися максимально швидке переміщення сервоприводу у вказану позицію. А ось виклик MoveTo (50, 1.0) відповідатиме плавному переміщенню зі швидкістю 1 оборот за хвилину (6 градусів в секунду). Оскільки сервопривід не дозволяє змінювати швидкість переміщення, то необхідний поворот буде розбитий на кілька мікропереміщень по 1 градусу, інтервал між якими буде таким, щоб забезпечити задану швидкість. Для визначення цього інтервалу зробимо нескладні обчислення
Не забуваємо заздалегідь визначити, який бік треба рухатися, тобто. додавати або віднімати градус за кожне мікропереміщення, для цього достатньо знати поточне та необхідне положення
Не забуваємо перевіряти, чи не виходить потрібне переміщення за межі встановлених крайніх значень. Оскільки виконувати однакову перевірку потрібно обох реалізацій функції MoveTo() , тобто сенс виділити нею окрему функцію
Підключення стандартне, до другого та третього цифрового виходу:

Тепер при запуску програми перший сервопривід, як і в попередньому прикладі, займезазначене становище. А ось другий повертатиметься досить повільно (його вихідне положення 90 градусів, для переміщення в положення 150 градусів потрібно повернутися на 60 градусів. Швидкість 0.5 обороту в хвилину відповідає 3 градуси в секунду, тобто переміщення займе 20 секунд). Нехай таке переміщення і не зовсім плавне, але воно все одно дозволяє гнучкіше управляти сервоприводом, причому достатньо лише однієї команди