首先,我們需要確定您的程序如何流動。
它執行一個命令,等待,然後執行下一個命令嗎?還是它同時執行命令? (例如,移動並執行其他操作)
我想你會希望它按順序執行命令,而不是你的電機系統可能不支持的一些複雜的線程。
爲了讓你的機器人緩慢移動,我建議建立一個Move()方法,它的參數,你希望它花移動的時間量,像這樣:
public void Move(int numberOfSeconds)
{
while (numberOfSeconds > 0)
{
myRobot.MotorOn();
Thread.Sleep(2000);
myRobot.MotorOff();
Thread.Sleep(500);
numberOfSeconds -= 2;
}
}
這是不是確切的,但這是做到這一點的一種方式。
如果您然後調用Move(10)例如,您的機器人將移動10秒鐘,並且每2秒暫停半秒鐘。
關於你的程序流程的問題,你可能要認爲它是指令列表:
向前 STOP 檢查對象 旋轉,瞄準對象 向前 STOP
等
所以在你的主程序控制循環,假設調用是同步的(即。它在執行命令時,如上面的Move方法),你的程序停止時,你可以簡單地有一堆如果你開始報表(或交換機)
public void Main()
{
// What calculations should the robot do?
If (someCalculations == someValue)
{
// Rotate the robot to face the object
robot.RotateRight(10);
}
else if (someOtherCalculation == someValue)
{
// We are on course, so move forward
Move(10);
}
}
這可能會有幫助。但是,如果機器人是異步的,也就是說,機器人在做事情時(例如,不斷從運動傳感器獲得反饋),代碼將繼續運行,您將不得不以不同的方式構造程序。 Move()方法可能仍然有效,但是你的程序流程應該略有不同。您可以使用一個變量來保持狀態軌道:
public enum RobotStates
{
Searching,
Waiting,
Hunting,
Busy,
}
然後在你的主循環,你可以檢查狀態:
if (myRobotState != RobotStates.Busy)
{
// Do something
}
記住更改時態你的動作完成。
這是完全可能的,您將不得不爲異步解決方案使用線程,因此從傳感器接收反饋的方法不會卡住等待機器人移動,但可以繼續輪詢。線程超出了這個答案的範圍,但是有很多資源。
+1全面解答。 – 2010-05-10 13:11:18