【问题标题】:Turning Motor on Lego NXT returns error 0002EA Type 2在 Lego NXT 上打开电机返回错误 0002EA 类型 2
【发布时间】:2013-03-25 03:35:15
【问题描述】:

我正在为 Lego NXT 编写一个使用 RobotC 的程序来模仿小狗的行为。这段代码应该是旋转连接到电机端口 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])第一次旋转时,错误 0002EA Type2 出现在 NXT 屏幕上。起初我们认为这是因为我们过度旋转电机导致它被阻塞,所以我们试图玩弄等待时间,但没有任何区别。

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

谢谢, 多米尼克

【问题讨论】:

  • 我认为您的错误与电机运动无关,而是与设置 sensorValleft 的声明有关,我认为您应该在 SensorValue[S3] 的位置,除非您在另一个函数中轮询传感器将各种传感器值存储在一个数组中。
  • 您可以使用 SensorValue 数组的 S1、S2、S3 或 S4 值或其数值 (0-3) 访问该数组。这不是问题

标签: robot lego


【解决方案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]。

【讨论】:

    【解决方案2】:

    在调试时,我开始设置断点以查看错误在哪里,并且它总是发生在motor[3] = -SPEED/2; 行上,结果证明对于第三个电机,正确的语法是使用motor[motorA]=-SPEED/2;。我不确定为什么只有这个电机会返回此错误,因为我正在使用另外两个电机,我使用这些电机设置了新速度

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多