1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

leJOS EV3でタッチセンサーのon/offのイベント処理

Last updated at Posted at 2016-06-19
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;
		}
	}
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?