01ac30f505fd115c4aea907628cfba5277e1ae0d
[des2015.git] / mart / ev3 / ex1 / nl / ru / des / StayInFieldBehaviour.java
1 package nl.ru.des;
2
3 import lejos.hardware.Button;
4 import lejos.hardware.motor.EV3LargeRegulatedMotor;
5 import lejos.hardware.sensor.NXTLightSensor;
6 import lejos.robotics.SampleProvider;
7
8 public class StayInFieldBehaviour extends AvoidBehaviour{
9 private SampleProvider light;
10 private float[] samples;
11 private float black, white, dist;
12
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()];
17 calibrate();
18 dist = Math.abs(black-white);
19 }
20
21 private void calibrate(){
22 LCDPrinter.print("Calibrate Light, place the light sensor on black...");
23 Button.waitForAnyPress();
24 light.fetchSample(samples, 0);
25 black = samples[0];
26 LCDPrinter.print("Black: " + black);
27
28 LCDPrinter.print("Place the light sensor on white");
29 Button.waitForAnyPress();
30 light.fetchSample(samples, 0);
31 white = samples[0];
32 LCDPrinter.print("White: " + white);
33
34 dist = Math.abs(black-white);
35 }
36
37 @Override
38 public boolean takeControl() {
39 this.light.fetchSample(samples, 0);
40 return samples[0] < Math.abs(white - dist/2);
41 }
42 }