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