TouchDetectorSample.java
package ev3.touchDetector;
import lejos.hardware.Button;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.BaseSensor;
import lejos.hardware.sensor.EV3TouchSensor;
import lejos.robotics.Touch;
import lejos.robotics.TouchAdapter;
import lejos.robotics.objectdetection.Feature;
import lejos.robotics.objectdetection.FeatureDetector;
import lejos.robotics.objectdetection.FeatureListener;
import lejos.robotics.objectdetection.TouchFeatureDetector;
public class TouchDetectorSample {
public static void main(String[] args) {
EV3TouchSensor ts = new EV3TouchSensor(SensorPort.S1); // S1ポートのタッチセンサーを使えるようにする
// タッチセンサーが押されたときに処理するように設定する
Touch touch = new TouchAdapter(ts);
TouchFeatureDetector touchDetector = new TouchFeatureDetector(touch);
touchDetector.addListener(new PressedProcess());
// タッチセンサーが放されたときに処理するように設定する
Touch release = new ReleaseAdapter(ts);
TouchFeatureDetector releaseDetector = new TouchFeatureDetector(release);
releaseDetector.addListener(new ReleasedProcess());
Button.waitForAnyPress(); // 何かボタンが押されるまで待つ
}
}
// EV3のAPIにあるTouchAdapterのisPressed()の結果を反転させて、放されたときにイベントを発生させる
class ReleaseAdapter extends TouchAdapter {
public ReleaseAdapter(BaseSensor touchSensor) {
super(touchSensor);
}
public boolean isPressed() {
return !super.isPressed();
}
}
// タッチセンサーが押された時の処理を持つクラス
class PressedProcess implements FeatureListener {
public void featureDetected(Feature feature, FeatureDetector detector) {
System.out.println("Pressed");
}
}
// タッチセンサーが放された時の処理を持つクラス
class ReleasedProcess implements FeatureListener {
public void featureDetected(Feature feature, FeatureDetector detector) {
System.out.println("Released");
}
}
フィールドの値を変更する場合のサンプル
TouchDetectorUseFieldSample.java
package ev3.touchDetector;
import lejos.hardware.Button;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3TouchSensor;
import lejos.robotics.Touch;
import lejos.robotics.TouchAdapter;
import lejos.robotics.objectdetection.Feature;
import lejos.robotics.objectdetection.FeatureDetector;
import lejos.robotics.objectdetection.FeatureListener;
import lejos.robotics.objectdetection.TouchFeatureDetector;
import lejos.utility.Delay;
public class TouchDetectorUseFieldSample {
static boolean isPressed = false;
public static void main(String[] args) {
EV3TouchSensor ts = new EV3TouchSensor(SensorPort.S1); // S1ポートのタッチセンサーを使えるようにする
// タッチセンサーが押されたときに処理するように設定する
Touch touch = new TouchAdapter(ts);
TouchFeatureDetector touchDetector = new TouchFeatureDetector(touch);
touchDetector.addListener(new PressedProcess());
// タッチセンサーが放されたときに処理するように設定する
Touch release = new ReleaseAdapter(ts);
TouchFeatureDetector releaseDetector = new TouchFeatureDetector(release);
releaseDetector.addListener(new ReleasedProcess());
while(!Button.ESCAPE.isDown()) {
System.out.println("Pressed:" + isPressed); // isPressedフィールドの値を表示する
Delay.msDelay(500); // 500ミリ秒まつ
}
}
// タッチセンサーが押された時の処理を持つクラス
static class PressedProcess implements FeatureListener {
public void featureDetected(Feature feature, FeatureDetector detector) {
isPressed = true;
}
}
// タッチセンサーが放された時の処理を持つクラス
static class ReleasedProcess implements FeatureListener {
public void featureDetected(Feature feature, FeatureDetector detector) {
isPressed = false;
}
}
}