Также.. не двигается.А если так ?
C++:void loop() { servo.setTarget(10); while (!servo.tick()); delay(3000); servo.setTarget(180); while (!servo.tick()); delay(3000); }
Целевая позиция в градусах устанавливается методом setTargetDeg, а не setTargetТакже.. не двигается.
Смотри, как бы вещь не оказалась в тебе =) ServoSmooth является оболочкой над Servo.h и использует её же методыа что не взять какую-нить стандартную библиотеку. типа Servo.h ? - проверенную миллионами юзеров?
библиотеки Алекса. вообще говоря. вещь в себе... хотя на этом форуме это лучше не говорить
#include <ServoDriverSmooth.h>
ServoDriverSmooth servo;
ServoDriverSmooth servo1;
uint32_t tmr;
boolean flag;
void setup() {
Serial.begin(9600);
Serial.println("setup");
servo.attach(8,160);
servo1.attach(7,0);
servo.setSpeed(130); // ограничить скорость
servo.setAccel(0.3); // установить ускорение (разгон и торможение)
servo1.setSpeed(130); // ограничить скорость
servo1.setAccel(0.3); // установить ускорение (разгон и торможение)
Serial.println("end setup");
delay(4000);
}
void loop() {
servo.tick();
servo1.tick();
servo.setTargetDeg(130);
servo1.setTargetDeg(20);
}
и вправду... спасибо!Отключи autoDetach() (включен по умолчанию), чтобы серва активно поддерживала заданный угол
#include <ServoSmooth.h>
ServoSmooth servo;
uint32_t tmr;
boolean flag;
void setup() {
Serial.begin(9600);
servo.attach(9); // подключить
servo.setSpeed(140); // ограничить скорость
servo.setAccel(0.5);
servo.setAutoDetach(false); //после добавления этой строчки программа перестает работать
}
void loop() {
servo.setTargetDeg(90);
while (!servo.tick());
delay(3000);
servo.setTargetDeg(180);
while (!servo.tick());
delay(3000);
servo.setTargetDeg(30);
while (!servo.tick());
delay(3000);
}
// Подключаем библиотеку
#include <Adafruit_PWMServoDriver.h>
#include <ServoDriverSmooth.h>
#include <ServoSmooth.h>
#include <smoothUtil.h>
//Создаём объект сервопривода
ServoSmooth servo;
// Определяем переменные
uint32_t tmr;
boolean flag;
void setup() {
servo.attach(9); // Инициализация сервопривода на 9 pin, стартовый угол по умолчанию 0 градусов
servo.smoothStart(); // НЕ РАБОТАЕТ привод должен плавно двигаться до 0 градусов из любого начального положения
servo.setSpeed(40); // Скорость движения сервопривода
}
void loop() {
servo.tick(); // Опрос сервопривода
if (millis() - tmr >= 30000) { // Каждые 30 секунд
tmr = millis();
flag = !flag;
servo.setTargetDeg(flag ? 0 : 180);// Крутим привод на 0 градусов или 180 градусов
}
}
Не нашли решение проблемы? С такой же проблемой борюсьДобрый вечер, господа. Пишу код для управления сервоприводом с помощью библиотеки Alexgyver "ServoSmooth". Сервопривод MG995 подключён к Arduino Nano. К сожалению не работает функция плавного движения сервопривода на стартовую позицию при запуске системы - servo.smoothStart(), сервопривод движется на стартовую позицию (по умолчанию 0 градусов) на полной скорости. Библиотеку ServoSmooth обновил до последней версии. Подскажите пожалуйста, в чём проблема?
C++:// Подключаем библиотеку #include <Adafruit_PWMServoDriver.h> #include <ServoDriverSmooth.h> #include <ServoSmooth.h> #include <smoothUtil.h> //Создаём объект сервопривода ServoSmooth servo; // Определяем переменные uint32_t tmr; boolean flag; void setup() { servo.attach(9); // Инициализация сервопривода на 9 pin, стартовый угол по умолчанию 0 градусов servo.smoothStart(); // НЕ РАБОТАЕТ привод должен плавно двигаться до 0 градусов из любого начального положения servo.setSpeed(40); // Скорость движения сервопривода } void loop() { servo.tick(); // Опрос сервопривода if (millis() - tmr >= 30000) { // Каждые 30 секунд tmr = millis(); flag = !flag; servo.setTargetDeg(flag ? 0 : 180);// Крутим привод на 0 градусов или 180 градусов } }
Не смог решить, сделал автономное питание Arduino, чтобы не отключалась.Не нашли решение проблемы? С такой же проблемой борюсь
int servoPrg02step = 3; //кол-во шагов
int servoPrg02 [][numberOfACE] = {
//{ kneeFR, hipFR, kneeMR, hipMR, kneeBR, hipBR, kneeFL, hipFL, kneeML, hipML, kneeBL, hipBL, ms }
//{ 1 нога | 2 нога M | 3 нога | 4 нога | 5 нога M | 6 нога |
{ 0, 0, -30, 0, 0, 0, 30, 0, 0, 0, 30, 0, 2000 },//2,4,6 up
{ 0, -45, 0, 45, 0, -45, 0, -45, 0, 45, 0, -45, 2000 },//1,3,5 назад, 2,4,6, вперед
{ 0, 0, 30, 0, 0, 0, -30, 0, 0, 0, -30, 0, 2000 },//2,4,6 down
}
void setup() {
Serial.begin(9600);
for (int j = 0; j < numberOfServos; j++) {
servo[j].attach(j,SERVOMIN,SERVOMAX,servoCal[j]);
servo[j].setAutoDetach(false); //отключаем автоотключение сервопривода при достижении заданного угла
servo[j].smoothStart(); //вызывать сразу после attach(пин, таргет). Смягчает движение серво из неизвестной позиции к стартовой. БЛОКИРУЮЩАЯ НА 1 СЕК!
servo[j].setSpeed(22); // скорость - градусов в секунду 22 = 2000 ms
servo[j].setAccel(0.5); // установка ускорения (0.05 - 1.0). При значении 1 ускорение максимальное. 0 - отключено
Serial.println("Установили " + (String)j + " серво");
}
}
void loop()
{
for (int p = 0; p < numberOfServos; p++) {
flag[p]=servo[p].tick();} // узнаем достигнули мы заданной позиции или нет
if (//сумма всех flag =12, т е все сервоприводы достигли нужного угла)
{
if (countStep<servoPrg03step-1) countStep+=1; //следующий шаг не должен превышать общее кол-во шагов
}
stepServo(servoPrg02,countStep);
}
void stepServo(const int servoPrg[][numberOfACE],int step) //выполняем один шаг
{
for (int p = 0; p < numberOfServos; p++) {
servoPos[p]=servo[p].getCurrentDeg(); //узнаем текущее положение серво для диагностики
}
for (int p = 0; p < numberOfServos; p++) { // Loop for servo
servo[p].setTargetDeg(servoPrg[step][p]+servoCal[p]);//устаналиваем новый угол складываем исходное значение угла + разницу до целевого угла
Serial.print(servoPos[p]);//смотрим текущуюу позицию сервопривода для анализа
}
}