update mart
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / behaviours / StayInFieldBehaviour.java
1 package nl.ru.des.behaviours;
2
3 import lejos.hardware.motor.EV3LargeRegulatedMotor;
4 import lejos.robotics.Color;
5 import lejos.robotics.SampleProvider;
6 import lejos.robotics.subsumption.Behavior;
7
8 public class StayInFieldBehaviour extends ReactiveBehaviour implements Behavior {
9 public static final long BACKWARDSTIME = 250;
10 public static final long TURNTIME = 250;
11
12 private EV3LargeRegulatedMotor leftMotor, rightMotor;
13
14 public StayInFieldBehaviour(SampleProvider color, EV3LargeRegulatedMotor leftMotor,
15 EV3LargeRegulatedMotor rightMotor) {
16 super(color);
17 this.leftMotor = leftMotor;
18 this.rightMotor = rightMotor;
19 }
20
21 @Override
22 public boolean takeControl() {
23 super.fetchSample();
24 return samples[0] == Color.BLACK;
25 }
26
27 @Override
28 public void action() {
29 super.action();
30 int leftacc = leftMotor.getAcceleration();
31 int rightacc = rightMotor.getAcceleration();
32 leftMotor.setAcceleration(10000);
33 rightMotor.setAcceleration(10000);
34 leftMotor.backward();
35 rightMotor.backward();
36 long time = System.currentTimeMillis();
37 while (!suppressed && System.currentTimeMillis() - time > BACKWARDSTIME) {
38 Thread.yield();
39 }
40
41 leftMotor.forward();
42 rightMotor.backward();
43 time = System.currentTimeMillis();
44 while (!suppressed && System.currentTimeMillis() - time > TURNTIME) {
45 Thread.yield();
46 }
47 leftMotor.stop(true);
48 rightMotor.stop(true);
49 leftMotor.setAcceleration(leftacc);
50 rightMotor.setAcceleration(rightacc);
51 }
52 }