2016-04-27 3 views
0

У меня есть сервопривод, который будет проходить от 0 до 180 градусов, а затем обратно в 0, но я не могу использовать функцию delay(), поскольку мне нужно, чтобы развертка была прервана датчиком движения. Я написал какой-то код, однако развертка не является гладкой, иногда сервопривод скачет. Что я сделал неправильно? Заранее спасибоarduino servo и delay

int x = 0; 

void pivot(){ 
for (pos = 0; pos <= 180; pos += 5) { // goes from 0 degrees to 180 degrees 
// in steps of 1 degree 
myservo_2.write(pos);    // tell servo to go to position in variable 'pos' 
//delay(15); 
    for (x; x<10; x++) 
    { 
    delay(1); 
    ping(); 
    } 
    x=0; 
} 
for (pos = 180; pos >= 0; pos -= 5) { // goes from 180 degrees to 0 degrees 
myservo_2.write(pos);    // tell servo to go to position in variable 'pos' 
//delay(15); 
for (x; x<10; x++) 
    { 
    delay(1); 
    ping(); 
    } 
    x=0; 
} 
} 

ответ

0

Я думаю, проблема проста в том, что вы пытаетесь слишком быстро пронестись.

На 180 градусов с шагом 5 всего 36 шагов, так что это 72 и обратно. При задержке в 1 мс 10 раз, вы пытаетесь переместить сервопривод через весь диапазон и обратно через 0,72 секунды. Это немного быстрее, чем обычный движок RC может двигаться. Для базового сервопривода характерно 0,24 секунды для 60 градусов, поэтому, если ваш полный диапазон составляет около 120, потребуется примерно 1 секунда. Тем не менее, насколько я знаю, вы можете использовать быстрый сервопривод с диапазоном 60 градусов.

Другая возможность заключается в том, что, когда вы говорите не гладко, вы не имеете в виду, что она прыгает случайно, а только что это дрожит. Я бы ожидал, что с 5-градусным прыжком каждые 10 мс вы получите немного прыжков, 10 Гц близко к частоте холостого хода Harley, а 5 градусов слишком велики, чтобы движение стало плавным с такой скоростью.

Вам нужен сервопривод для остановки во время 10 пингов, или он может непрерывно развернуться? Если это возможно, я уменьшу количество пингов за стоп и пропорционально уменьшу размер шага. IE шаг 1 степени и пинг 2 раза.

Смежные вопросы