X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;ds=sidebyside;f=dsl%2Fruntime%2Fsrc%2Fnl%2Fru%2Fdes%2FBasicBehaviour.java;h=945a70986b945a268298deb91de7bb3cb9d86cb4;hb=3e5a839d3f540c49d5b903bfebdd8913e7deef9a;hp=c91e6138370b8604f5b4126686b84d145bfba04e;hpb=d66c5c319eb15f45086d6d0f6bda34b7ebedc42e;p=des2015.git diff --git a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java index c91e613..945a709 100644 --- a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java +++ b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java @@ -1,52 +1,168 @@ package nl.ru.des; -import lejos.hardware.motor.EV3LargeRegulatedMotor; +import lejos.robotics.RegulatedMotor; import lejos.robotics.subsumption.Behavior; import nl.ru.des.sensors.SensorCollector; public abstract class BasicBehaviour implements Behavior{ protected boolean suppressed; - protected EV3LargeRegulatedMotor leftMotor, rightMotor, measMotor; + protected boolean finished; + protected RegulatedMotor leftMotor, rightMotor, measMotor; protected SensorCollector sensors; protected long time; - public BasicBehaviour(SensorCollector sensors, EV3LargeRegulatedMotor leftMotor, - EV3LargeRegulatedMotor rightMotor, EV3LargeRegulatedMotor measMotor){ + public BasicBehaviour(SensorCollector sensors, RegulatedMotor leftMotor, + RegulatedMotor rightMotor, RegulatedMotor measMotor){ this.leftMotor = leftMotor; this.rightMotor = rightMotor; this.measMotor = measMotor; this.sensors = sensors; + suppressed = false; + finished = true; } - + protected void reset(){ + finished = true; rightMotor.setSpeed(Constants.speed); rightMotor.setAcceleration(Constants.acceleration); leftMotor.setSpeed(Constants.speed); leftMotor.setAcceleration(Constants.acceleration); rightMotor.stop(true); leftMotor.stop(true); + measMotor.stop(true); } - protected void rockMeasure(){ + protected void measureLake(){ + long time = System.currentTimeMillis(); + rightMotor.backward(); + leftMotor.backward(); + while(System.currentTimeMillis()-time < 250){ + Thread.yield(); + } + + rightMotor.stop(true); + leftMotor.stop(true); + rightMotor.setSpeed(25); + leftMotor.setSpeed(25); + if(sensors.leftLight() && !sensors.rightLight()){ + leftTurn(10); + } else if (sensors.rightLight() && !sensors.leftLight()){ + rightTurn(10); + } + + rightMotor.stop(true); + leftMotor.stop(true); + + measMotor.rotate(-100, true); + while(!suppressed && !measMotor.isStalled() && measMotor.isMoving()){ + Thread.yield(); + } + measMotor.rotate(100, true); + while(!suppressed && !measMotor.isStalled() && measMotor.isMoving()){ + Thread.yield(); + } + measMotor.stop(true); + reset(); + rightMotor.backward(); + leftMotor.backward(); + while(System.currentTimeMillis()-time < 250){ + Thread.yield(); + } + turnRandom(45, 60); } - protected void lakeMeasure(){ + protected void measureRock(){ + long time = System.currentTimeMillis(); + rightMotor.forward(); + leftMotor.forward(); + while(System.currentTimeMillis()-time<1000){ + Thread.yield(); + } + rightMotor.stop(true); + leftMotor.stop(true); + + measMotor.backward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.forward(); + while(!suppressed && !measMotor.isStalled()){ + Thread.yield(); + } + measMotor.stop(true); + + rightMotor.backward(); + leftMotor.backward(); + while(System.currentTimeMillis()-time<1000){ + Thread.yield(); + } + turnRandom(30, 45); + } + + protected void turnRandom(int from, int to){ + int degrees = Marster.random.nextInt(to-from)+from; + if(Marster.random.nextBoolean()){ + rightTurn(degrees); + } else { + leftTurn(degrees); + } + } + + protected void rightTurn(int angle){ + rightMotor.stop(true); + leftMotor.stop(); + sensors.resetGyro(); + rightMotor.backward(); + leftMotor.forward(); + while(!suppressed && Math.abs(sensors.gyro()) < angle){ + Thread.yield(); + } + rightMotor.stop(true); + leftMotor.stop(true); + System.out.println(Float.toString(sensors.gyro())); + } + + protected void leftTurn(int angle){ + rightMotor.stop(true); + leftMotor.stop(); + sensors.resetGyro(); + leftMotor.backward(); + rightMotor.forward(); + while(!suppressed && Math.abs(sensors.gyro()) < angle){ + Thread.yield(); + } + rightMotor.stop(true); + leftMotor.stop(true); + System.out.println(Float.toString(sensors.gyro())); } @Override public void action() { suppressed = false; + finished = false; + rightMotor.setSpeed(Constants.speed); + rightMotor.setAcceleration(Constants.acceleration); + leftMotor.setSpeed(Constants.speed); + leftMotor.setAcceleration(Constants.acceleration); + rightMotor.stop(true); + leftMotor.stop(true); } @Override public void suppress() { suppressed = true; + finished = true; + rightMotor.setSpeed(Constants.speed); + rightMotor.setAcceleration(Constants.acceleration); + leftMotor.setSpeed(Constants.speed); + leftMotor.setAcceleration(Constants.acceleration); + rightMotor.stop(true); + leftMotor.stop(true); } - @Override - public boolean takeControl() { + @Override public boolean takeControl(){ return true; } }