3 import lejos
.robotics
.RegulatedMotor
;
4 import lejos
.robotics
.subsumption
.Behavior
;
5 import nl
.ru
.des
.sensors
.SensorCollector
;
7 public abstract class BasicBehaviour
implements Behavior
{
8 protected enum SuppressedState
{
9 IDLE
, IN_ACTION
, SUPPRESSED
;
11 private SuppressedState suppressed
;
12 protected RegulatedMotor leftMotor
, rightMotor
, measMotor
;
13 protected SensorCollector sensors
;
16 public BasicBehaviour(SensorCollector sensors
, RegulatedMotor leftMotor
,
17 RegulatedMotor rightMotor
, RegulatedMotor measMotor
){
18 this.leftMotor
= leftMotor
;
19 this.rightMotor
= rightMotor
;
20 this.measMotor
= measMotor
;
21 this.sensors
= sensors
;
24 protected void reset(){
25 rightMotor
.setSpeed(Constants
.speed
);
26 rightMotor
.setAcceleration(Constants
.acceleration
);
27 leftMotor
.setSpeed(Constants
.speed
);
28 leftMotor
.setAcceleration(Constants
.acceleration
);
29 rightMotor
.stop(true);
31 setSuppressed(SuppressedState
.IDLE
);
32 long time
= System
.currentTimeMillis();
33 while(System
.currentTimeMillis()-time
> 250){
38 protected void measure(){
40 while(getSuppressed() == SuppressedState
.IN_ACTION
&& !measMotor
.isStalled()){
44 while(getSuppressed() == SuppressedState
.IN_ACTION
&& !measMotor
.isStalled()){
51 protected void rightTurn(int angle
){
55 rightMotor
.backward();
57 while(getSuppressed() == SuppressedState
.IN_ACTION
&& Math
.abs(sensors
.gyro()) < angle
){
60 LCDPrinter
.print(Float
.toString(sensors
.gyro()));
63 protected void leftTurn(int angle
){
69 while(getSuppressed() == SuppressedState
.IN_ACTION
&& Math
.abs(sensors
.gyro()) < angle
){
72 LCDPrinter
.print(Float
.toString(sensors
.gyro()));
75 protected synchronized void setSuppressed(SuppressedState sup
){
79 protected SuppressedState
getSuppressed(){
84 public void action() {
85 setSuppressed(SuppressedState
.IN_ACTION
);
89 public void suppress() {
90 setSuppressed(SuppressedState
.SUPPRESSED
);
93 @Override public boolean takeControl(){