Приветствую, есть пример управления сервой через PCA9685 из библиотеки/ Само управление с потенциометра мне нужно, нужно просто задавать напрямую положения серв.
Как сюда добавить несколько серв и вызвать?
В примере с подключением напрямую к дуне с несколькими сервами, они подключаются так
servos[0].attach(2);
servos[1].attach(3);
servos[2].attach(4);
servos[3].attach(5);
но по аналогии не работает
servo[0].attach(0, 150, 550);
servo[1].attach(0, 150, 550);
C++:
/*
Данный код плавно управляет одной сервой
при помощи потенциометра (на пине А0).
Используется драйвер PCA9685
Откройте порт по последовательному соединению для наблюдения за положением серво
Документация: https://alexgyver.ru/servosmooth/
*/
#include "ServoDriverSmooth.h"
ServoDriverSmooth servo;
//ServoDriverSmooth servo(0x40); // с указанием адреса драйвера
//ServoDriverSmooth servo(0x40, 270); // с указанием адреса и макс. угла
uint32_t myTimer;
void setup() {
Serial.begin(9600);
servo.attach(0, 150, 550); // 150 и 600 - длины импульсов, при которых
// серво поворачивается максимально в одну и другую сторону, зависят от самой серво
// и обычно даже указываются продавцом. Мы их тут указываем для того, чтобы
// метод setTargetDeg() корректно отрабатывал диапазон поворота сервы
// для драйвера диапазон в районе 150-600! Не как у обычной серво
servo.setSpeed(120); // ограничить скорость
servo.setAccel(0.5); // установить ускорение (разгон и торможение)
}
void loop() {
// желаемая позиция задаётся методом setTarget (импульс) или setTargetDeg (угол), далее
// при вызове tick() производится автоматическое движение сервы
// с заданным ускорением и ограничением скорости
boolean state = servo.tick(); // здесь происходит движение серво по встроенному таймеру!
if (millis() - myTimer >= 40) {
myTimer = millis();
int newPos = map(analogRead(0), 0, 1023, 0, 180); // берём с потенцометра значение 0-180
servo.setTargetDeg(newPos); // и отправляем на серво
Serial.println(String(newPos) + " " + String(servo.getCurrentDeg())/* + " " + String(state)*/);
// state показывает сотояние сервы (0 - движется, 1 - приехали и отключились)
}
}
В примере с подключением напрямую к дуне с несколькими сервами, они подключаются так
servos[0].attach(2);
servos[1].attach(3);
servos[2].attach(4);
servos[3].attach(5);
но по аналогии не работает
servo[0].attach(0, 150, 550);
servo[1].attach(0, 150, 550);