2013-03-25 88 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]。