首先,我们需要确定您的程序如何流动。
它执行一个命令,等待,然后执行下一个命令吗?还是它同时执行命令? (例如,移动并执行其他操作)
我想你会希望它按顺序执行命令,而不是你的电机系统可能不支持的一些复杂的线程。
为了让你的机器人缓慢移动,我建议建立一个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