2016-04-27 149 views
0

我有一個伺服器,將掃描從0到180度,然後回到0然而我不能使用delay()函數,因爲我需要掃描被運動傳感器中斷。我寫了一些代碼,但掃描不平滑,伺服有時會跳轉。我沒有做好什麼?在此先感謝arduino伺服器和延遲

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

我認爲問題很簡單,你正試圖掃過得太快。

以5爲增量的180度只有36步,所以這就是72。在1 ms延遲循環10次的情況下,您試圖將伺服器全程移動並返回0.72秒。這比典型的RC伺服可以移動的速度稍快。對於基本伺服系統而言,60度時0.24秒是典型值,所以如果您的滿量程約爲120度,則需要大約1秒。這就是說,就我所知,你可能正在使用60度範圍的快速伺服器。

另一種可能性是,當你說不光滑時,並不意味着它隨機跳動,而只是它抖動。我期望每10毫秒跳5度就會得到一點跳躍,10赫茲接近哈利怠速的頻率,而5度過大的運動在該速度下顯得平滑。

您需要伺服器在10點鐘停止,還是可以連續掃動?如果可以的話,我會減少每站停車次數,並按比例減少步長。 IE步驟1度並ping 2次。