Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@uplight_max

leJOSのTimerクラスで周期的な処理の実行

More than 5 years have passed since last update.

はじめに

この記事は 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関係の記事を作ろうと思います。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?