3 import lejos
.hardware
.Button
;
4 import lejos
.hardware
.motor
.EV3LargeRegulatedMotor
;
5 import lejos
.hardware
.sensor
.NXTLightSensor
;
6 import lejos
.robotics
.SampleProvider
;
8 public class StayInFieldBehaviour
extends AvoidBehaviour
{
9 private SampleProvider light
;
10 private float[] samples
;
11 private float black
, white
, dist
;
13 public StayInFieldBehaviour(NXTLightSensor lightSensor
, EV3LargeRegulatedMotor leftMotor
, EV3LargeRegulatedMotor rightMotor
) {
14 super(rightMotor
, leftMotor
, "bound.wav");
15 light
= lightSensor
.getRedMode();
16 samples
= new float[light
.sampleSize()];
18 dist
= Math
.abs(black
-white
);
21 private void calibrate(){
22 LCDPrinter
.print("Calibrate Light, place the light sensor on black...");
23 Button
.waitForAnyPress();
24 light
.fetchSample(samples
, 0);
26 LCDPrinter
.print("Black: " + black
);
28 LCDPrinter
.print("Place the light sensor on white");
29 Button
.waitForAnyPress();
30 light
.fetchSample(samples
, 0);
32 LCDPrinter
.print("White: " + white
);
34 dist
= Math
.abs(black
-white
);
38 public boolean takeControl() {
39 this.light
.fetchSample(samples
, 0);
40 return samples
[0] < Math
.abs(white
- dist
/2);