乐高NXT上的旋转电机返回错误0002EA类型2



我用RobotC为乐高NXT编写了一个程序来模仿小狗的行为。这段代码应该旋转连接到电机端口3的头部并读取超声波传感器上的值。如果当狗的头转过来的时候,有人叫它,它会转向它已经面对的方向。当超声波传感器读取一个值(意味着机器人已经接近墙壁)时,调用以下函数:

可见

void SonarSensor()
{
int sensorValleft;
int sensorValright;
bool alreadyTurned = false;
int i,j;
i = 0;
j = 0;
motor[1] = 0;
motor[2] = 0;
motor[3] = -SPEED/2;
wait10Msec(15);
motor[3] = 0;
sensorValleft = SensorValue[3];
while(i<100)
{
    if(SensorValue[4] > 40)//calibrate sound sensor
    {
        //turn left
        motor[1]=SPEED;
        motor[2] = -SPEED;
        wait10Msec(25);
        i = 1000;
        j = 1000;
        alreadyTurned = true;
    }
    else
    {
        i++;
        wait1Msec(5);
    }
}
motor[3] = SPEED/2;
wait10Msec(30);
motor[3] = 0;
sensorValright = SensorValue[3];
while(j<100)
{
    if(SensorValue[3] > 1)//calibrate sound sensor
    {
        //turn right
        motor[1]-=SPEED;
        motor[2] = SPEED;
        wait10Msec(25);
        j = 1000;
        alreadyTurned = true;
    }
    else
    {
        j++;
        wait1Msec(5);
    }
}
if(alreadyTurned == false)
{
    if(sensorValleft > sensorValright)
    {
        //turn left
        motor[1]=SPEED;
        motor[2] = -SPEED;
        wait10Msec(25);
    }
    else
    {
        //turn right
        motor[1]=-SPEED;
        motor[2] = SPEED;
        wait10Msec(25);
    }
}

}可见

当机头(电机[3])第一次旋转时,NXT屏幕上出现0002EA Type2错误。一开始,我们认为这是因为我们过度旋转了马达,导致它受阻,所以我们试着改变等待时间,但没有什么不同。

如果有任何关于导致这个错误的原因或如何修复它的想法,我将不胜感激。

谢谢,多米尼克•

关于为什么只有马达[3]引起错误的答案实际上很简单。motorA、motorB和motorC的值定义在一个enum中,其中motorA=0, motorB=1, motorC=2。因此,电动机[1]和电动机[2]等价于称电动机[motorB]和电动机[motorC]。然而,电机[3]并不等于任何东西。它试图设定一个不存在的马达的功率。但是,motor[0]可以,并且对应于motor[motorA]。

在调试时,我开始放入断点以查看错误在哪里,并且它总是发生在motor[3] = -SPEED/2;行上,事实证明,对于第三个电机,正确的语法是使用motor[motorA]=-SPEED/2;。我不知道为什么只有这个电机返回这个错误,因为我正在使用另外两个电机,我使用

设置新的速度
motor[1]=SPEED;
motor[2]=SPEED;

但是,这是消除错误的方法

最新更新