2016-04-27 11 views
0

Ich habe ein Servo, das von 0 bis 180 Grad dann zurück zu 0 fegt, aber ich kann die Funktion delay() nicht verwenden, wie ich die Wobbelung durch einen Bewegungssensor unterbrochen werden muss. Ich habe etwas Code geschrieben, aber der Sweep ist nicht glatt, der Servo springt manchmal herum. Was habe ich nicht richtig gemacht? Vielen Dank im Vorausarduino Servo und Verzögerung

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; 
} 
} 

Antwort

0

Ich denke, das Problem ist einfach, dass Sie versuchen, zu schnell fegen.

180 Grad in Schritten von 5 ist nur 36 Schritte, so dass 72 dort und zurück ist. Mit einer 10-maligen Verzögerung von 1 ms versuchen Sie, das Servo in 0,72 Sekunden durch den gesamten Bereich und zurück zu bewegen. Dies ist nur ein wenig schneller, als ein typisches RC-Servo bewegen kann. 0,24 Sekunden für 60 Grad sind typisch für ein Basisservo, wenn also die volle Reichweite 120 ist, dauert es ungefähr 1 Sekunde. Das heißt, ich weiß, dass Sie vielleicht ein schnelles Servo mit einer 60-Grad-Reichweite verwenden.

Die andere Möglichkeit ist, dass, wenn Sie nicht glatt sagen, Sie nicht meinen, dass es zufällig herumspringt, sondern nur, dass es zittert. Ich würde mit 5 Grad Sprüngen alle 10 ms erwarten, dass Sie ein wenig springen würden, 10 Hz ist nah an der Frequenz einer Harley im Leerlauf und 5 Grad ist zu groß für eine Bewegung, um bei dieser Geschwindigkeit glatt zu erscheinen.

Benötigen Sie, dass das Servo während der 10 Pings stoppt, oder kann es kontinuierlich fegen? Wenn es dann möglich ist, würde ich die Anzahl der Pings pro Stopp verringern und die Schrittgröße proportional verringern. IE Schritt 1 Grad und Ping 2 mal.