0

レゴ 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 画面に表示されます。最初は、モーターを過度に回転させて妨害したためだと思ったので、待機時間をいじってみましたが、違いはありませんでした.

このエラーの原因や修正方法についてのアイデアをいただければ幸いです。

ありがとう、ドミニク

4

2 に答える 2

0

デバッグ中に、エラーがどこにあるかを確認するためにブレークポイントを挿入し始めましたが、常に行motor[3] = -SPEED/2;で発生していたため、3 番目のモーターでは適切な構文がmotor[motorA]=-SPEED/2;. を使用して新しい速度を設定した他の2つのモーターを使用しているため、このモーターのみがこのエラーを返す理由がわかりません

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

しかし、これはエラーを解消する方法でした。

于 2013-03-25T16:00:18.847 に答える