レゴ 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 画面に表示されます。最初は、モーターを過度に回転させて妨害したためだと思ったので、待機時間をいじってみましたが、違いはありませんでした.
このエラーの原因や修正方法についてのアイデアをいただければ幸いです。
ありがとう、ドミニク