2a6240ede6cbd838f775642c4e400b5c67de102a
[des2015.git] / dsl / runtime / src / nl / ru / des / BasicBehaviour.java
1 package nl.ru.des;
2
3 import lejos.robotics.RegulatedMotor;
4 import lejos.robotics.subsumption.Behavior;
5 import nl.ru.des.sensors.SensorCollector;
6
7 public abstract class BasicBehaviour implements Behavior{
8 protected boolean suppressed;
9 protected boolean finished;
10 protected RegulatedMotor leftMotor, rightMotor, measMotor;
11 protected SensorCollector sensors;
12 protected long time;
13
14 public BasicBehaviour(SensorCollector sensors, RegulatedMotor leftMotor,
15 RegulatedMotor rightMotor, RegulatedMotor measMotor){
16 this.leftMotor = leftMotor;
17 this.rightMotor = rightMotor;
18 this.measMotor = measMotor;
19 this.sensors = sensors;
20 suppressed = false;
21 finished = true;
22 }
23
24 protected void reset(){
25 finished = true;
26 rightMotor.setSpeed(Constants.speed);
27 rightMotor.setAcceleration(Constants.acceleration);
28 leftMotor.setSpeed(Constants.speed);
29 leftMotor.setAcceleration(Constants.acceleration);
30 rightMotor.stop(true);
31 leftMotor.stop(true);
32 }
33
34 protected void measure(){
35 measMotor.backward();
36 while(!suppressed && !measMotor.isStalled()){
37 Thread.yield();
38 }
39 measMotor.forward();
40 while(!suppressed && !measMotor.isStalled()){
41 Thread.yield();
42 }
43 measMotor.stop(true);
44 rightTurn(90);
45 }
46
47 protected void turnRandom(int from, int to){
48 int degrees = Marster.random.nextInt(to-from)+from;
49 if(Marster.random.nextBoolean()){
50 rightTurn(degrees);
51 } else {
52 leftTurn(degrees);
53 }
54 }
55
56 protected void rightTurn(int angle){
57 rightMotor.stop(true);
58 leftMotor.stop();
59 sensors.resetGyro();
60 rightMotor.backward();
61 leftMotor.forward();
62 while(!suppressed && Math.abs(sensors.gyro()) < angle){
63 Thread.yield();
64 }
65 rightMotor.stop(true);
66 leftMotor.stop(true);
67 LCDPrinter.print(Float.toString(sensors.gyro()));
68 }
69
70 protected void leftTurn(int angle){
71 rightMotor.stop(true);
72 leftMotor.stop();
73 sensors.resetGyro();
74 leftMotor.backward();
75 rightMotor.forward();
76 while(!suppressed && Math.abs(sensors.gyro()) < angle){
77 Thread.yield();
78 }
79 rightMotor.stop(true);
80 leftMotor.stop(true);
81 LCDPrinter.print(Float.toString(sensors.gyro()));
82 }
83
84 @Override
85 public void action() {
86 suppressed = false;
87 finished = false;
88 }
89
90 @Override
91 public void suppress() {
92 suppressed = true;
93 finished = true;
94 }
95
96 @Override public boolean takeControl(){
97 return true;
98 }
99 }