Implemented communication protocol
[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.subsumption.Behavior;
6 import nl.ru.des.sensors.ColorSensor;
7
8 public class StayInFieldBehaviour implements Behavior {
9 public static final long BACKWARDSTIME = 250;
10 public static final long TURNTIME = 250;
11
12 private ColorSensor colorSensor;
13 private EV3LargeRegulatedMotor leftMotor, rightMotor;
14 private boolean suppressed;
15
16 public StayInFieldBehaviour(ColorSensor colorSensor, EV3LargeRegulatedMotor leftMotor,
17 EV3LargeRegulatedMotor rightMotor) {
18 this.colorSensor = colorSensor;
19 this.leftMotor = leftMotor;
20 this.rightMotor = rightMotor;
21 }
22
23 @Override
24 public boolean takeControl() {
25 return colorSensor.getCurrentColor() == Color.BLACK;
26 }
27
28 @Override
29 public void action() {
30 suppressed = false;
31 int leftacc = leftMotor.getAcceleration();
32 int rightacc = rightMotor.getAcceleration();
33 leftMotor.setAcceleration(10000);
34 rightMotor.setAcceleration(10000);
35 leftMotor.backward();
36 rightMotor.backward();
37 long time = System.currentTimeMillis();
38 while (!suppressed && System.currentTimeMillis() - time > BACKWARDSTIME) {
39 Thread.yield();
40 }
41
42 leftMotor.forward();
43 rightMotor.backward();
44 time = System.currentTimeMillis();
45 while (!suppressed && System.currentTimeMillis() - time > TURNTIME) {
46 Thread.yield();
47 }
48 leftMotor.stop(true);
49 rightMotor.stop(true);
50 leftMotor.setAcceleration(leftacc);
51 rightMotor.setAcceleration(rightacc);
52 }
53
54 @Override
55 public void suppress() {
56 suppressed = true;
57 }
58 }