У меня есть код, управляющий старым аналоговым сервоприводом, и все работает нормально.

Но когда я получил новый цифровой сервопривод, он не будет удерживать положение, а вернется в 0.

Помогите, что нужно?

Вот базовый код, основанный на Sweep:

#include <Servo.h> 
Servo myservo; 
int pos = 0;     

void setup() 
{ 
myservo.attach(A1);   
} 

void loop() 
{ 
for(pos = 0; pos <= 180; pos++)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
 } 
0
Steffen Myklebust 20 Ноя 2014 в 03:20
Извините, но... Что вы хотите сделать? Этот скетч настраивает сервопривод на канале A1, затем быстро перемещает его в положение 0, затем перемещает его в положение 180 (занимает около 2,7 секунды), затем быстро перемещает в положение 0, начиная снова. Это то, что вы хотите сделать? Или вы хотите держать его в фиксированном положении? Какая позиция? Как вы его измените?
 – 
frarugi87
20 Ноя 2014 в 22:54

2 ответа

Сразу после вашего цикла for поместите:

while(1);

Перед закрывающей скобкой цикла () Это остановит программу в этой точке и не будет продолжать выполнять цикл for, который каждый раз объявляет pos = 0.

0
djUniversal 20 Ноя 2014 в 10:17

Я вижу, что этот вопрос был немного неточен.

Но я обнаружил, что есть еще один способ управления сервоприводом, а именно использование writeMicroseconds вместо myservo.write(90).

myservo.writeMicroseconds(1500);  // 

http://arduino.cc/en/Reference/ServoWriteMicroseconds

0
Steffen Myklebust 22 Ноя 2014 в 15:01