X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=dsl%2Fruntime%2Fsrc%2Fnl%2Fru%2Fdes%2FBasicBehaviour.java;h=945a70986b945a268298deb91de7bb3cb9d86cb4;hb=3e5a839d3f540c49d5b903bfebdd8913e7deef9a;hp=2f1dcda6f7addd873ced6ce8a237b58e9ce24984;hpb=e880e959fed2d3506a790d3b361a2ed4aa49a95f;p=des2015.git diff --git a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java index 2f1dcda..945a709 100644 --- a/dsl/runtime/src/nl/ru/des/BasicBehaviour.java +++ b/dsl/runtime/src/nl/ru/des/BasicBehaviour.java @@ -1,21 +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 EV3LargeRegulatedMotor leftMotor, rightMotor; + protected boolean suppressed; + protected boolean finished; + protected RegulatedMotor leftMotor, rightMotor, measMotor; + protected SensorCollector sensors; + protected long time; - public BasicBehaviour(nl.ru.des.Sensors sensors, EV3LargeRegulatedMotor leftMotor, EV3LargeRegulatedMotor rightMotor){ + 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 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 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 boolean takeControl() { - return true; + 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() {} + 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(){ + return true; + } }