leJOSでモーター制御

土曜日の撮影に向けて、アルファレックスを左右に歩かせるくらいのことはできるようになっておかなければなりません。
とりあえず、leJOSでの個々の部品の使い方を、サンプルコードを作りながら学んでいきたいと思います。
ほとんど経験のないJavaでのコーディング、一体どうなることやら・・・。


まずは、モーターの慣性についてテストするコードを書いてみました。(ほぼパクリ)


import lejos.nxt.*;

public class InertiaTest
{
public static void main(String[] args)
{
LCD.drawString("Inertia Test", 0, 0); // ディスプレイに文字を表示します
Button.waitForPress(); // ボタンが押されるまで待ちます
rotate720(); // 下記で作ったヘルパーメソッドを呼び出します
Motor.A.resetTachoCount(); //タコメーター(モーターを何度回したか)のカウントをリセットします
Motor.A.setSpeed(800); // モーターの回転速度を設定します(この場合だと、800度/秒)
rotate720(); // 再度ヘルパーメソッドを呼び出します
}

public static void rotate720()
{
Motor.A.forward(); // モーターを順方向に回転します
int count = 0;
while( count < 720 )count = Motor.A.getTachoCount(); // モーターの回転が720度になるまでカウントし続けます
Motor.A.stop(); // モーターをストップします
LCD.drawInt(count , 0, 1); // モーターが何度回転したかを表示します
while(Motor.A.getRotationSpeed()>0); // モーターが完全に停止するまで、ループします
LCD.drawInt(Motor.A.getTachoCount(), 7,1 ); // 再度、モーターが何度回転したかを表示します
Button.waitForPress(); // ボタンが押されるまで待ちます
LCD.clear(); // 画面の表示をクリアします
}
}


stopメソッドを使っても、慣性の力が働くため、すぐにモーターの回転が止まるわけではありません。
今回のテストでは、完全停止するまでに、15度ほど余計に回転していました。
すぐに止めたい時のために、lockというメソッドが用意されています。


今日、はじめてわかったことですが、プログラムの実行中にエラーが起きると、マインドストームの電池を抜く以外に止める方法がありません。
というわけで、皆さん、例外処理はきちんとやりましょう。