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