2013-03-25 87 views
0

我写一个使用RobotC的乐高NXT模仿小狗的行为的程序。这部分代码应该旋转连接到电机端口3的磁头并读取超声波传感器上的值。如果头部转动时,狗叫,它会转向它已经面临的方向。当超声波传感器读取的值(意味着机器人已接近一个壁)下面的函数被调用:乐高NXT转动电机返回错误0002EA 2型

可见

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时旋转。起初我们认为是因为我们过度旋转马达导致马达受阻,所以我们试图在等待时间中玩耍,但没有任何区别。

什么原因导致此错误或如何解决它的任何想法,将不胜感激。

感谢, 多米尼克

+0

我不认为你的错误与电机运动有关,而是我们认为你应该是'SensorValue [S3]'的设置'sensorValleft'的语句,除非你在另一个存储函数中轮询你的传感器数组中的各种传感器值。 – 2013-03-25 13:14:55

+0

您可以使用其S1,S2,S3或S4值或其数值(0-3)访问SensorValue阵列。这不是问题 – Dominique 2013-03-25 15:47:12

回答

0

调试时,我开始把破发点中看到的错误是,它alwas发生就行了motor[3] = -SPEED/2;事实证明,随着第三马达正确的语法是使用motor[motorA]=-SPEED/2; 。我不知道为什么只有这个电机我使用其他两个马达,我使用

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

设置新的速度。然而,这是取消的错误的方式返回此错误。

1

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