在 Lego NXT 上转动电机会返回错误 0002EA 类型 2

问题描述 投票:0回答:2

我正在使用 RobotC 为 Lego 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。起初我们认为这是因为我们过度旋转电机导致其被阻塞,所以我们尝试调整等待时间,但没有什么区别。

任何关于导致此错误的原因或如何修复该错误的想法将不胜感激。

c robotics lego-mindstorms
2个回答
1
投票

为什么只有 motor[3] 会导致错误,答案其实很简单。 motorA、motorB 和 motorC 值在枚举中定义,其中 motorA=0、motorB=1 和 motorC=2。因此,motor[1]和motor[2]相当于调用motor[motorB]和motor[motorC]。然而,motor[3] 并不等同于任何东西。它试图设置一个不存在的电机的功率。然而,motor[0] 没问题,并且对应于 motor[motorA]。


0
投票

在调试时,我开始放置断点以查看错误所在,并且它总是发生在

motor[3] = -SPEED/2;
行上,事实证明,对于第三个电机,正确的语法是使用
motor[motorA]=-SPEED/2;
。我不确定为什么只有这个电机返回此错误,因为我正在使用另外两个电机,我使用它们设置了新速度

motor[1]=SPEED;
motor[2]=SPEED;

然而,这是消除错误的方法。

© www.soinside.com 2019 - 2024. All rights reserved.