2014-12-10 72 views
0

我有編碼器反饋的機器人,以及i希望使用移動機器人一定距離的功能,並把它在一定的角度,因此,例如:如何將機器人移動一定距離並仍然管理傳感器?

void loop(){ 

    if (Obstacle==false){ // if no obstacles 

     forward(1000); // move forward 1000 mm 
     backward(1000); // move backward 1000 mm 

     //... 
    } 
} 

正向功能:

void forward(int distance){ // distance in mm 

    int desiredRotationNumber= round(distance/circumference) ; 

    int desiredTicks = encoderResolution * desiredRotationNumber; 

    if (counter < desiredTicks) // variable counter counts the pulses from the encoder 
    { 
     analogWrite(motor,255); 
    } 
    else 
    { 
     analogWrite (motor,0); 
    } 

} 

問題是,如果我使用條件「如果」我的轉發功能將只執行一次,然後程序跳轉到下一個功能,但如果我使用「while循環」我的移動功能將正確執行,但我不會能夠管理傳感器或任何東西。

回答

2

你可能想要的是削減你的動作在遞增,並檢查傳感器在這些增量之間:

while (distance > 0 && !Obstacle){ 
    forward(step); 
    distance-=step; 
    check_sensors(); 
} 

多線程,你可以把這些操作(移動和傳感)異步工作,並使用某種事件發佈來警告每個線程的變化。在這裏,我們通過interwinding任務來模擬這個功能(你也可以查看協程來獲得類似的,但更有效的想法)。

+0

美麗的謝謝你,如果我發現一個障礙比從我的移動功能將無法運行,但如果障礙走了路?我怎麼能恢復從我停在最後一個移動功能的移動方向集? – Apastrix 2014-12-10 23:18:35

+0

我想你會需要一個機制來存儲正在進行的移動列表(一個鏈接列表可能?),然後逐個拿出來。然後您可以從列表中輕鬆恢復。 – didierc 2014-12-10 23:22:35

+0

我會試一試,再次感謝。 – Apastrix 2014-12-10 23:25:11