##はじめに
この記事は ETロボコン Advent Calendar 2015 の17日目です。
香川大学SLP-Aというチームで中四国地区に参加した者です。
今年はTOPPERS環境のC++で出場しましたが、来年以降はJavaかC#で出場しようと考えています。
今回はleJOSを調べる過程で見つけたTimerクラスについて書きます。
##Timerクラス
leJOSには周期的な処理の実行を実現するために、Timerクラスが用意されているようです。
Javaに元々用意されているTimerクラスと同じように使用することができます。
組み込みに詳しくない私としては違いがよくわかりませんが、用意されているものは使った方がいい気がするので試しに使ってみました。
##使用例
今回はTimerクラスを利用してカウンターを作成してみます。
Timerクラスのコンストラクタを見てみます。
Timer(int theDelay, TimerListener el)
引数は実行する周期と、TimerListenerインターフェースを実装したクラスです。
では、TimerListenerインターフェースを実装するクラスとして、CountTimerクラスを作成します。
周期的に実行したい処理は、timedOutメソッドに記述します。
今回はカウンターの機能として、カウントと画面への表示を記述します。
package test;
import lejos.hardware.lcd.LCD;
import lejos.utility.TimerListener;
public class CountTimer implements TimerListener {
static int count;
CountTimer(){
count = 0;
}
public void timedOut() {
count += 1;
LCD.clear();
LCD.drawString(String.valueOf(count),0, 0);
LCD.refresh();
}
}
Timerクラスを使用する準備は整いました。実際に使用します。
package test;
import lejos.hardware.Button;
import lejos.hardware.lcd.LCD;
import lejos.utility.Timer;
public class TimerTest {
public static void main(String[] args) {
CountTimer count = new CountTimer();
Timer countTimer = new Timer(1000, count);
LCD.clear();
LCD.drawString("Program Start",0, 0);
LCD.refresh();
while(Button.ESCAPE.isUp()){
if(Button.RIGHT.isDown()) {
countTimer.start();
}
if(Button.LEFT.isDown()) {
countTimer.stop();
}
}
}
}
実行すると、「Program Start」という文字が表示されます。
右ボタンを押すとタイマーが作動し、1秒ごとにカウントが増えることが確認できます。
左ボタンを押すとタイマーが停止します。
##感想
TimerクラスはThreadクラスの変わりに使用することができそうなので、ETロボコンでは使う機会があると思います。
余裕があれば、次はMonoBrick関係の記事を作ろうと思います。