0ce1704906399ead077ae3dc32d24e308745393f
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / behaviours / AvoidLowObjectBehaviour.java
1 package nl.ru.des.behaviours;
2
3 import lejos.hardware.motor.EV3LargeRegulatedMotor;
4 import lejos.robotics.subsumption.Behavior;
5 import nl.ru.des.sensors.TouchSensor;
6
7 public class AvoidLowObjectBehaviour implements Behavior {
8 private static final long BACKWARDSTIME = 250;
9 private static final long TURNTIME = 250;
10 private TouchSensor rightTouch, leftTouch;
11 private boolean avoidDirection;
12 private boolean suppressed;
13 private EV3LargeRegulatedMotor leftMotor, rightMotor;
14
15 public AvoidLowObjectBehaviour(EV3LargeRegulatedMotor leftMotor, EV3LargeRegulatedMotor rightMotor,
16 TouchSensor leftTouchSensor, TouchSensor rightTouchSensor) {
17 rightTouch = rightTouchSensor;
18 leftTouch = leftTouchSensor;
19 this.leftMotor = leftMotor;
20 this.rightMotor = rightMotor;
21 }
22
23 @Override
24 public boolean takeControl() {
25 if(leftTouch.getCurrentStatus()){
26 avoidDirection = false;
27 return true;
28 }
29 if(rightTouch.getCurrentStatus()){
30 avoidDirection = true;
31 return true;
32 }
33 return false;
34 }
35
36 @Override
37 public void action() {
38 suppressed = false;
39 int leftacc = leftMotor.getAcceleration();
40 int rightacc = rightMotor.getAcceleration();
41 leftMotor.setAcceleration(10000);
42 rightMotor.setAcceleration(10000);
43 leftMotor.backward();
44 rightMotor.backward();
45 long time = System.currentTimeMillis();
46 while (!suppressed && System.currentTimeMillis() - time > BACKWARDSTIME) {
47 Thread.yield();
48 }
49
50 if(avoidDirection){
51 leftMotor.backward();
52 rightMotor.forward();
53 } else {
54 leftMotor.forward();
55 rightMotor.backward();
56 }
57 time = System.currentTimeMillis();
58 while (!suppressed && System.currentTimeMillis() - time > TURNTIME) {
59 Thread.yield();
60 }
61 leftMotor.stop(true);
62 leftMotor.stop(true);
63 leftMotor.setAcceleration(leftacc);
64 leftMotor.setAcceleration(rightacc);
65 }
66
67 @Override
68 public void suppress() {
69 suppressed = true;
70 }
71 }