しつこくも、ジャイロセンサーねた・・・
ジャイロセンサーが他のセンサーと違うところは・・・
ただ値を読み取れば良い、のではなく、読み取った値を継続的に管理しなければならないところです。
で、前回までで、ジャイロセンサーの値を読み取って、ロボットの回転方向を割り出すことは出来たのですが・・・
もっと汎用的にしないと役に立ちませんねぇ。
ロボットは(プログラムは)ジャイロセンサーを常に監視しているわけではなく、モーターを動かしたり、他のセンサーを確認したり、他に何かをしながら、たまに回転状況を確認するためにジャイロセンサーを見ます。
ということは、メインループで常にジャイロセンサーを見て、積分をしていてはダメということですね。
そこで・・・タスクを並行に走らせます。
そう task です。
task main( )
とは別に、ジャイロセンサーを見て積分をする task を作ります。
まあ、こんな感じ・・・
int GyroDirection;
task Gyro()
{
int i,j;
i = SensorHTGyro(S1,0);
j=0;
while(true)
{
j += SensorHTGyro(S1,i);
GyroDirection = j/100;
Wait(10);
}
}
task main()
{
Wait(100);
SetSensorHTGyro(S1);
StartTask(Gyro);
while(true)
{
TextOut(0,LCD_LINE1," ");
NumOut(0,LCD_LINE1,GyroDirection);
Wait(1000);
}
}
task main( ) では、最初にポート1をジャイロセンサーに定義して、 task Gyro( ) を起動させたあとは、適当な時間間隔で task Gyro( ) が積算している積分値を表示するだけです。
このプログラムを実行してみると・・・
一秒ごとに値が更新されます。
ジャイロセンサーが付けられたNXT本体を回転させて・・・元に戻すと、ちゃんと「0」になります。